使用带有特殊字符的SimpleXML在PHP中创建XML
我在使用带有特殊字符的SimpleXML在PHP中创建XML,php,mysql,xml,apache-flex,special-characters,Php,Mysql,Xml,Apache Flex,Special Characters,我在flex 3中进行项目工作,用户输入一些文本,这些文本将存储在mysql数据库中,稍后显示。我使用XML将数据从flex传输到php,反之亦然simplexmlement用于创建XML。问题在于XML在特殊字符上中断 以下是示例代码: 弹性: var-someXML:XML=somedata。。。 变量数据:对象={}; data.xmlData=someXML; saveDataService.send(数据); 此处somedata是用户输入的数据。在php中,我使用simplexml
flex 3
中进行项目工作,用户输入一些文本,这些文本将存储在mysql
数据库中,稍后显示。我使用XML
将数据从flex传输到php,反之亦然<php
中的code>simplexmlement用于创建XML
。问题在于XML
在特殊字符上中断
以下是示例代码:
弹性:
var-someXML:XML=somedata。。。
变量数据:对象={};
data.xmlData=someXML;
saveDataService.send(数据);
此处somedata
是用户输入的数据。在php
中,我使用simplexmlement
提取someXML
,并将其存储到mysql
。在这里之前没有问题。即使某些数据
具有特殊字符,其工作正常,数据存储正确
现在,在另一种情况下,从数据库中获取数据并在flex中显示,php的响应会出现错误:
SimpleXMLElement::addChild()[SimpleXMLElement.addChild]:
未终止实体引用
我尝试在php中使用urlencode
,在flex中使用decodeURI
函数,但解码后的字符串不一样,解码后仍然有少数特殊字符%xy
如何解决此问题?在将数据传递给XML中的SimpleXMLElement::addChild之前,请尝试使用htmlspecialchars转义数据,然后启动实体。
代码>结束它。当您有一个文本&
时,您将得到一个未终止的实体引用。将所有和更改为&代码>已不是实体,例如不要将
更改为&;燃气轮机代码>。或者将一些数据放入CDATA区域。首先,如果您的xml中有一个悬空的&
字符,那么您就有一个xml语法错误。它与SimpleXML或任何其他解析器无关。我建议您甚至在数据进入数据库之前就解决这个问题,更好的是,在数据发送到php服务之前
戈登的建议至少对和有效。您可能会遇到其他字符的问题,例如,通过执行一些跟踪和错误,我发现当存在“&”字符时XML会中断。这会将所需的XML语法字符也转换为html实体,这会使SimpleXMLNo无法解析内容,请尝试调用以下函数:$document->addChild('myElement',htmlspecialchars($value));否则只需使用DOMDocument,它会自动执行;-)感谢您的响应。我会付出努力。是的,我做得很好。
var someXML:XML = <root><data>somedata</data><data>...</data> ... </root>
var data:Object = {};
data.xmlData = someXML;
saveDataService.send(data);
XML(new XMLNode(XMLNodeType.TEXT_NODE, "content with special chars like & and others")).toXMLString();