Frage

Ich versuche, eine XML-Zeichenfolge enthält Zeichen & in den Textdaten zu analysieren. Normalerweise sollten diese Zeichen Htmlencoded werden, aber in meinem Fall sind sie nicht so dass ich die folgenden Meldungen erhalten:

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 Ich bin es für gültige XML-Tags zu tun.

Hat jemand eine Abhilfe für dieses Problem wissen ??

Danke!

War es hilfreich?

Lösung

Wenn Sie eine es ist kein gültiges XML . Versuchen Sie, zu kodieren oder umschließen sie in <![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_!?])', '&lt;', $str);
$str= preg_replace('&(?!([a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+);)', '&amp;', $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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top