开发者

Creating XML in PHP using SimpleXML with special characters

开发者 https://www.devze.com 2023-03-24 11:08 出处:网络
I am working on project in flex 3, where user enters some text which is to be stored in a mysql database and shown later. I am using XML for data transfer from flex to php and vice-versa. SimpleXMLEle

I am working on project in flex 3, where user enters some text which is to be stored in a mysql database and shown later. I am using XML for data transfer from flex to php and vice-versa. SimpleXMLElement in php is being used to create the XML. The problem is the XML breaks on special characters.

Here is sample code:

FLEX:

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

saveDataService.send(data);

Here somedata is the data entered by the user. In php, I extract the someXML using SimpleXMLElement and store it to mysql. There is no problem till here. Even if somedata has special characters its working fine and data is stored properly.

Now, in the other case, getting data from database and showing in flex, the response from the php breaks with an error:

SimpleXMLElement::addChild() [simplexmlelement.addchild]: unterminated entity reference开发者_运维技巧

I tried using urlencode in php, and decodeURI function in flex, but the decoded string is not the same, few special characters are still %xy after decoding.

How do I solve this problem?


In XML an & starts an entity. The ; ends it. When you have a literal & you will get an unterminated entity reference. Change all & to &amp; that are not entities already, e.g. dont change &gt; to &amp;gt;. Or put somedata into CDATA sections.


First off, if you have a dangling & character in your xml, then you have an xml syntax error. Its nothing to do with SimpleXML or any other parser complaining. I'd suggest you fix this even before the data gets into the db, better yet, before it is sent to the php service.

Gordon's suggestion works, for & at least. You'll likely face the problem with other characters like <, " etc., later on and you'll be facing pretty much the same thing.

I'd suggest you do a htmlentities like operation on the text data in side the xml, not including the xml tags themselves. Following code taken from 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();

Haven't tested the above, but it should return you the sanitized content that you can put into xml. It should effectively turn & chars into &amp;, all of them. i.e., This should also turn occurences of &gt; to &amp;gt;, so be wary of that.

Let me know if you need anything else. Also, how ya doin' man!? ;)

Edit: Oh, keep in mind, it has been long time since I used php, so some of the info above might be a bit off. Please correct me guys. Thanks.


Try escaping your data with htmlspecialchars before passing it to SimpleXMLElement::addChild

0

精彩评论

暂无评论...
验证码 换一张
取 消