Kırık XML veri ile PHP DomDocument XML Yük

3 Cevap php

Nasıl XML dosyalarında kırık veri ile anlaşma yapmak? Örneğin, ben olsaydı

<text>Some &improper; text here.</text>

Ben yapmaya çalışıyorum:

 $doc = new DOMDocument();
 $doc->validateOnParse = false;
 $doc->formatOutput = false;
 $doc->load(...xml');

bilinmeyen bir varlık var çünkü ve o sefil başarısız olur. Ben nedeniyle yazılım yazıldığı şekilde CDATA kullanamazsınız unutmayın. Ben okur ve XML yazar, bazen kullanıcı yanlış metni ekler bir modül yazıyorum.

Ben DOMDocument-> loadHTML () güzel her şeyi kodlayan fark ettik, ama nasıl oradan devam edebilir?

3 Cevap

Belki preg_replace_callback sizin için kuruluşlar ile ağır kaldırma yapmak için kullanabilirsiniz:

http://php.net/manual/en/function.preg-replace-callback.php

function fixEntities($data) {
    switch(substr($data, 1, strlen($data) - 2)) {
        case 'amp':
        case 'lt':
        case 'gt':
        case 'quot': // etc., etc., etc.
            return $data;
    }
    return '';
}
$xml = preg_replace_callback('/&([a-zA-Z0-9#]*);{1}/', 'fixEntities', $xml);

htmlspecialchars xml / xhtml dom içine girişini iterek önce özel xml karakterleri seri hale getirmek için kullanın. Adını değiştirir sadece karakterlere göre "html" öneki iken, xml veri serileştirme için gerçekten yararlıdır.

Eğer xml yazıyor biri iseniz xml içine koymadan önce varlıkları içine herhangi bir kullanıcı girişi kodlamak gibi, hiçbir sorun olmalıdır.