PHP ile Bozuk XML (şifresiz XML kişiler) okuma

2 Cevap php

PHP biçimlendirilmiş XML ayrıştırma bazı sorun yaşıyorum. Özellikle ben gerçek verilerin XML varlıkları kodlayan olmadan bir XML formatında veri döndüren bir üçüncü taraf webservice sorgulama ediyorum. Örneğin unsurlardan biri XML ayrıştırıcı bir açılış etiketi olarak gördüğü tırnak işaretleri olmadan bir ASCII kalbi, '<3', içerir. Bu '< 3' olmalıdır.

Şu anda ben sadece tahmin, bu durumlarda başarısız bir SimpleXMLElement içine XML dizesi geçiyorum. Biraz etrafa yaptık ve PHP Tidy paketi bana yardımcı olabilir gibi görünüyor, ama yapabileceğiniz yapılandırma miktarı ezici: (

Dolayısıyla, ben sadece, bir başkasının böyle bir sorun vardı, merak ediyorum ve eğer öyleyse, bunu çözmek başardık nasıl.

Teşekkürler!

2 Cevap

Try tidy.repairString:

php > $tidy = new tidy();
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1));
php > print($repaired);
<foo>I &lt;3 Philadelphia</foo>
php > $el = new SimpleXMLElement($repaired);
  1. Bir dizge olarak içeriğini okuyun.
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. SimpleXMLElement dönüştürdü dize yüklenemedi

Bugüne kadar benim için çalıştı.