php özel karakterler strpos

4 Cevap

Ben PHP Version 5.1.6 kullanıyorum

Ben bir dize (oturum dosyası) var ve ondan bir değer ayıklamak gerekiyor, bu yüzden dizesinde bir iğne arıyorum ama ben bu kodu azaltılmış, false döndürür:

$string = ';SERVER_NAME|s:17:"stackoverflow.com";REMOTE_ADDR|s:13:"69.59.196.211";';
$start = strpos($string, ';SERVER_NAME|s:"');
echo $start; // prints nothing because $start = false

$start = strpos($string, 'SERVER_NAME|s:');
echo $start; // prints 1;

Ben karakter varsa fark gibi ';' veya karakteri '"' iğne, arama false döndürür ben kaldırırsanız, ben, iğne tüm karakterler için) (chr kullanmak için uğraş ama aynı sonucu vardı ';' ve '"' dizesinde iğne bulursa dizeden.

Nasıl PHP kullanarak bir dize özel karakterler arama yapabilirsiniz?

4 Cevap

Sen açıkça samanlıkta mevcut olmadığı ;SERVER_NAME|s:" arıyor. Ben iğne olarak ;SERVER_NAME|s:17:" kullanmak gerekiyordu sanırım.

$start = strpos($string, ';SERVER_NAME|s:17:"');
echo $start; // prints 0

It was a typo that i missed, sorry problem solved. The correct code is:

$result = ';SERVER_NAME|s:17:"stackoverflow.com";REMOTE_ADDR|s:13:"69.59.196.211";';
$str_start = ';SERVER_NAME|s:';
$str_end = ':"';
$start = strpos($result, $str_start)+strlen($str_start);
$end = strpos($result, $str_end, $start);
$len = $end - $start;
$str_len = substr($result, $start, $len);
echo $server_name = substr($result, ($end + strlen($str_end)), $str_len);

and at the end it prints: stackoverflow.com

Yani çalışıyor, yardım için teşekkür ederim!

neden değil unserialize bu dizesi ilk?

bu karakterler gibi, özel bir şey onları orada

Ben dize'nın pozisyonu FALSE (sen dize bulunan bir iğne kullanılarak varsayarak) değerlendirir 0, hangi olabilir çünkü yanlış olduğunu düşünüyorum söyleyebilirim. Her zaman === ile karşılaştırmak gerekir.

documentation (büyük kırmızı bir uyarı kutusunda) Gönderen:

Warning

Bu fonksiyon Boolean FALSE döndürebilir, ama aynı zamanda FALSE gibi 0 veya "" değerlendiren olmayan bir Boole değeri döndürebilir . Daha fazla bilgi edinmek için Mantıksal bölümü okuyunuz. Bu işlevin dönüş değeri sınamak için === operatörünü kullanın.

Bu " ile mükemmel benim için çalışıyor. Ilk yankı yazdırır şey substring ;SERVER_NAME|s:" gerçekten orijinal dizesinde bulunan değildir çünkü.

Ben bir alıntı 'ile bir iğne dize başladı ve "çift tırnak içeren bir dize aranır gibi strpos bir sorun vardı.

Örnek 1 - Çalışmaz:

strpos($text,'class="level')

Explanation: Double quote (") for some reason ends string even if we started string with one quote (').

Örnek 2 - çalışmıyor:

strpos($text,'class=\"level')

Explanation: There is an escape sign before Double quote (") but it doesn't perform it's function.

Örnek 3 - Works:!

strpos($text,"class=\"level")

Explanation: If you start needle string with double quote you can then escape double quote with backslash ().

Umarım yardımcı olur ....