2011-01-11 10 views
0

Ich habe eine API erstellt, die XML-Code zurückgibt. Zum Beispiel, kehrt die API:utf8_decode Fehler mit Ampersand (&)

<message>hello, this is a message &amp; it used htmlsepcialchars</message> 

Ich verwende file_get_contents() und simplexml_load_string(), um die zurückgegebenen Informationen in eine Anordnung zu laden.

Ich benutzte dann utf8_decode(), um die Nachricht in einen freundlichen Zeichensatz auf der empfangenden Website zu konvertieren. Allerdings habe ich die folgende Meldung an der den Stift zeigt auf das Ampersand (&) in der Nachricht:

Warning: main() [function.main]: unterminated entity reference 

Aufgrund des Ampersand, der Rest der Nachricht abgeschnitten wird. Irgendwelche Ideen, wie man dieses Problem umgehen kann?

+1

Vielleicht macht 'simplexml_load_string()' das '&' in ein Und-Zeichen? Vielleicht würde es helfen, es neu zu kodieren. ('htmlentities()' kann hier helfen.) – Amber

+0

Kurzer Kommentar: Sie brauchen 'file_get_contents()' nicht, verwenden Sie einfach 'simplexml_load_file ('/ pfad/zu/file');' - Bitte geben Sie auch einen Link an zu der Datei, die diesen Fehler erzeugt. –

Antwort

0

Gefunden meine Antwort, Benutzerfehler. Ich bin im Grunde irgendwo in meinem Code wieder geflüchtet.

0

Es scheint, dass Ihr kaufmännisches Und zwar nicht codiert ist, also entschlüsseln Sie es entweder doppelt oder legen Sie es in das CDATA-Feld.

Normalerweise sollten Sonderzeichen wie diese in CDATA-Felder geschrieben werden. es erspart die Mühe, codieren zu müssen. php DOM-Erstellung Funktionen haben, was Sie brauchen.


$doc->createCDATASection 

und natürlich:

http://www.w3schools.com/Xml/xml_cdata.asp

und http://fr.php.net/manual/en/function.domdocument-create-cdata-section.php

+0

Es gibt praktisch kein Szenario, in dem es in Ihrem Interesse liegt * nicht * Sonderzeichen zu "kodieren" (oder eher zu entkommen). Sie möchten nicht blind den Text zwischen '' setzen und hoffen, dass der Text nicht etwas enthält, das Ihren XML-Code ungültig macht. Wenn Sie DOM-Methoden verwenden, wird die Eingabe automatisch maskiert, auch für CDATA, also kein Problem. –

+0

Deshalb habe ich gesagt, es rettete ihm die Mühe, es zu tun. – cromestant

0

Nun müssen SimpleXML Strings codiert werden UTF8 und Werte Einheiten entwertet werden sollte. Ist utf_decode() in Ihrem Code wirklich notwendig?

+0

SimpleXML ist nicht auf UTF-8 beschränkt, es kann die meisten Codierungen laden, solange die Datei gültig ist (IOW, solange die korrekte Codierung deklariert ist.) –