PHP DomDocument-> loadXML mit XML enthält Ampersand / weniger / mehr?
-
20-09-2019 - |
Frage
Ich versuche, eine XML-Zeichenfolge enthält Zeichen &
Warning: DOMDocument :: loadXML () [function.loadXML]: Fehler beim Parsen Attributnamen in Entity ... Warning: DOMDocument :: loadXML () [function.loadXML]: Konnte Ende Starttag ...
finden kann ich die str_replace verwenden zu kodieren alle &, aber wenn ich das mit
Hat jemand eine Abhilfe für dieses Problem wissen ??
Danke!
Lösung
Wenn Sie eine <![CDATA[
.
Wenn es nicht möglich ist (weil Sie nicht dieses „XML“ ausgeben) Ich würde vorschlagen, mit einiger HTML-Parsing-Bibliothek, um zu versuchen (ich habe sie nicht genutzt, aber sie existiert) beacuse sie sind weniger streng als XML diejenigen.
Aber ich würde wirklich versuchen, gültigen XML zu erhalten, bevor eine andere Sache versuchen !!
Andere Tipps
ich oft @
vor Anrufe Last () verwenden, für DomDocument vor allem, weil man nie absolut sicher sein können, was Sie laden, ist das, was Sie erwartet.
@
verwenden werden Fehler unterdrücken.
@$dom->loadXml($myXml);
kann ich die str_replace verwenden zu kodieren alle &, aber wenn ich das mit
Ich bin es für gültige XML-Tags zu tun.
Als streng temporäre Korrektur messen Sie diejenigen ersetzen, die nicht Teil von dem, was aussieht wie ein Tag oder Entity-Referenz, zum Beispiel:.
$str= preg_replace('<(?![a-zA-Z_!?])', '<', $str);
$str= preg_replace('&(?!([a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+);)', '&', $str);
Dies ist jedoch nicht wasserdicht und auf längere Sicht müssen Sie fix, was auch immer diesen Schein-Markup zu erzeugen, oder schreit der Person, die es beheben muss, bis sie einen Anhaltspunkt zu bekommen. Grossly-nicht-wohlgeformte XML wie dies einfach nicht XML per Definition.
Setzen Sie alle Ihre Text in CDATA Elemente?
<!-- Old -->
<blah>
x & y < 3
</blah>
<!-- New -->
<blah><![CDATA[
x & y < 3
]]></blah>