2 Stimmen

XML-Erstellung in PHP mit SimpleXML mit Sonderzeichen

Ich arbeite an einem Projekt in flex 3 bei dem der Benutzer einen Text eingibt, der in einem mysql Datenbank gespeichert und später angezeigt. Ich verwende XML für den Datentransfer von flex zu php und umgekehrt. SimpleXMLElement en php wird verwendet, um die XML . Das Problem ist die XML Unterbrechungen bei Sonderzeichen.

Hier ein Beispielcode:

FLEX:

var someXML:XML = <root><data>somedata</data><data>...</data> ... </root>
var data:Object = {};
data.xmlData = someXML;

saveDataService.send(data);

Hier somedata sind die vom Benutzer eingegebenen Daten. Unter php extrahiere ich die someXML mit SimpleXMLElement und speichern sie in mysql . Bis hierher gibt es kein Problem. Auch wenn somedata Sonderzeichen enthält, funktioniert es einwandfrei und die Daten werden ordnungsgemäß gespeichert.

Nun, im anderen Fall, immer Daten aus der Datenbank und zeigt in flex, die Antwort von der php bricht mit einem Fehler:

SimpleXMLElement::addChild() [simplexmlelement.addchild]: unterminierte Entitätsreferenz

Ich habe es mit urlencode in php, und decodeURI Funktion in flex, aber die dekodierte Zeichenkette ist nicht die gleiche, einige Sonderzeichen sind noch %xy nach der Dekodierung.

Wie kann ich dieses Problem lösen?

3voto

Gordon Punkte 304254

In XML wird ein & startet eine Entität. Die ; beendet es. Wenn Sie eine wörtliche & erhalten Sie eine nicht beendete Entitätsreferenz . Alle ändern & a &amp; die nicht bereits Entitäten sind, z.B. nicht ändern &gt; a &amp;gt; . Oder fügen Sie einige Daten in CDATA-Abschnitte ein.

2voto

sharat87 Punkte 7112

Erstens, wenn Sie einen baumelnden & Zeichen in Ihrer Xml, dann haben Sie einen Xml-Syntaxfehler. Es hat nichts mit SimpleXML oder einem anderen Parser zu tun, der sich beschwert. Ich würde vorschlagen, dass Sie dies beheben, noch bevor die Daten in die Datenbank gelangen, besser noch, bevor sie an den PHP-Dienst gesendet werden.

Der Vorschlag von Gordon funktioniert, denn & mindestens. Sie werden wahrscheinlich das Problem mit anderen Zeichen wie < , " usw., und Sie werden später mit so ziemlich demselben Problem konfrontiert sein.

Ich schlage vor, Sie machen eine htmlentities wie die Operation auf dem Text Daten in der Xml-Datei, no einschließlich der xml-Tags selbst. Der folgende Code stammt aus http://thingsthatwork.net/index.php/2008/06/26/html-entities-and-actionscript/

XML(new XMLNode(XMLNodeType.TEXT_NODE, "content with special chars like & and others")).toXMLString();

Ich habe das oben genannte nicht getestet, aber es sollte Ihnen die desinfiziert Inhalte, die Sie in xml einfügen können. Es sollte effektiv verwandeln & Zeichen in &amp; d.h., dies sollte auch das Auftreten von &gt; a &amp;gt; Seien Sie also vorsichtig damit.

Lassen Sie mich wissen, wenn Sie noch etwas brauchen. Außerdem, wie geht's dir, Mann? ;)

bearbeiten : Oh, denken Sie daran, es ist lange her, seit ich php verwendet, so dass einige der oben genannten Informationen könnte ein bisschen aus sein. Bitte korrigiert mich, Leute. Danke.

1voto

Ben Punkte 345

Versuchen Sie, Ihre Daten mit htmlspecialchars zu escapen, bevor Sie sie an SimpleXMLElement::addChild übergeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X