PHP SimpleXML Ortaklıklar

4 Cevap simplexml

Burada bir tane oluyor?

$string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
    <album>
        <img src="002.jpg" caption="w&aacute;ssup?" />
    </album>
XML;

$xml = simplexml_load_string($string);
// $xmlobj = simplexml_load_file("xml.xml"); // same thing

echo "<pre>";
var_dump($xml);
echo "</pre>";

Hata:

Uyarı: (simplexml_load_string) [function.simplexml-load-string]: Varlık: çizgi 5: ayrıştırıcı hatası: İdarenin aacute 'tanımlı değil

4 Cevap

&aacute olmayan bir XML entity - HTML hakkında düşünüyorsun.

XML "olduğu gibi" özel karakterler genellikle kullanılır - Bir html_entity_decode() veri girişi üzerinde hile yapmak gerekir (karakter kümesi olarak UTF-8 belirtmek unutmayın):

$string = html_entity_decode($string, ENT_QUOTES, "utf-8");

Sen alternatif bir yöntem üzerinde Matt Robinson's article bakmak isteyebilirsiniz: Converting named entities to numeric in PHP. Bu html_entity_decode yöntemi (zaten başka bir cevap tarafından işaret) ve bazı potansiyel tuzaklar bahseder:

Bu yaklaşım ile iki olası sorunları vardır. Ilk geçersiz kişiler olduğunu: html_entity_decode() Hala XML hatalarını alacaksınız anlamına gelir, onlara dokunmaz. İkinci kodlar. Ben aslında istemediğiniz bu mümkün sanırım UTF-8. Sen bu harika, çünkü gerekir, ama belki iyi bir nedeni var. Eğer html_entity_decode() UTF-8, belirlediğiniz set karakter yoktur varlıkları dönüştürmek olmaz kullanmak. Söylemezsen Eğer iconv() dönüştürmek gibi bir şey kullanmak sonra UTF-8 çıkış için bunu söylemek ve eğer, o zaman çıktı kodlaması olmayan herhangi bir karakter kaybedersiniz.

Eğer komut dosyası oldukça hantal bulursanız Ayrıca, aynı zamanda bir shared on SourceRally kullanabilirsiniz.

i had this problem the other day. any occurrence of & will need to be inside a CDATA tag

<album>
    <img src="002.jpg" />
    <caption><![CDATA[now you can put whatever characters you need & include html]]></caption>
</album> 

başarısız gelen çözümleyici tutmak.

Başka bir çözüm değiştirmektir

"w&aacute;ssup?" to "w&amp;aacute;ssup?"