PHP printf [kapalı] ayrıştırma değil simplexml_load_string, basılmıyor

6 Cevap php

Ben printf'e olmayacak bazı veriler var ....

echo çalışır, ama printf değil

Orada verileri, dizesinde aynı zamanda simplexml_load_string dizeyi ayrıştırmak değildir.

Orada göremiyorum bazı ikili veya görünmeyen karakter ve başarısız olmasına neden printf yanı sıra PHP çoğu diğer string fonksiyonları olduğu için sıra değeri alınamıyor.

Açıkçası bu, ancak ben bu yüzden düzgün deşifre / kodlamak ne olduğunu öğrenmek için nasıl bilmiyorum, bir kodlama konudur.

$string = getStringFromDatabase();
printf($string);

...

Nothing is displayed

...

No errors, No Warnings, No Nothing

Açıkçası veri Ben her karakter üzerinde ben döngü, ancak, ben oraya gitmek yok burada eğer var biliyorum, orada var.

[UPDATE] This is weird because the ordinal value is outside of the typical ASCII range.

ord ($ [$ i] tampon) = 1610

Bir DLE ve LF karakterleri bir combo. Değil orada var ya da neden nasıl emin. Ya da olması gerekiyordu, ne iki tarafında veriler geçerlidir ve bunun için konumu oldukça garip.

karakter here> 0000

6 Cevap

Teşekkürler-komik değil, bilge-çatlak olmayan cevaplar ve benim kötü belirtilen soruya çok kötü yorumlar için. Sanırım, bir sürü insan yerine düşünmek zorunda cevap kolay sorular arayan rep-troller vardır. Aşağı da bu oylamak için çekinmeyin.

Aslında yardım etmeye çalıştı insanlara içten teşekkürler.

Aynı sorunla karşılaşırsanız sizin kim için, burada gerçek cevabı:

Cevap zamanında bir hata bir multi-byte karakter. Sen dize chr (16) bulma ve boş bir dize ("") ile değiştirerek etrafında çalışabilirsiniz. Eğer s / v / printf fonksiyonları ile çalışmak gerekiyorsa budur.

Printf Tanımı:

int printf  ( string $format  [, mixed $args  [, mixed $...  ]] )

Eğer $ biçimi olarak dize geçiyoruz sadece o senin sorunun değil mi? Sadece print kullanın veya bir $format dize ve bir $string ile printf sağlamak gerekmez mi?

echo anlamıyla çıkış dize olacak, ama sen ilk parametre olarak dizesi geçirirseniz printf, bu biçimi olarak yorumlanır - bu% karakterler içeriyorsa, bu kaynağı olabilir senin sorunun.

Bu çalışırsa:

echo $foo

O yüzden bu olmalıdır:

printf("%s", $foo);

Bir dize hızlı ve kirli HexDump almak istiyorsanız, böyle bir şey deneyin

$foo="fo \00 33jj";

$len=strlen($foo);
for ($i=0; $i<$len; $i++)
{
  printf("%02x ", ord($foo[$i]));
}

//outputs 66 6f 20 00 20 33 33 6a 6a

Burada bakmak: http://ditio.net/2008/11/04/php-string-to-hex-and-hex-to-string-functions/ ve belki de sadece onaltılık gösterimi görüntülemek ve kötü karakterler gelebilir, ama; Ayrıca sadece dize geçmesi ve yeni bir dizeye tüm yazdırılabilir karakterleri (ASCII> 31 ve <128) kopyalayın ve daha sonra bu dize yazdırabilirsiniz.

Denemek

file_put_contents('tmp.txt', $string);

daha sonra bir hex editörü yükleyin.

Dize boş olabilir gibi bu noktada ben denemek istiyorum:

echo "'" . $string . "'<br>";