我们调用一个返回XML格式数据字符串的API。我们想通过XMLParse()将此字符串转换为ColdFusion XML对象。当特殊字符显示在数据值中时,会出现问题。例如,像这样的字符:
— –
(是的,原始数据包含它们的HTML编码等价物)。在执行XMLParse()时,它会在这些编码字符上引发错误。这是一个错误的例子:
我们的一部分字符串:
<event>Hello World</event>
错误:
Reference to undefined entity " "
使这些字符与XMLParse()兼容的最佳方法是什么?更重要的是 - 如果我们不总是知道角色会是什么,我们怎么能这样做呢?
谢谢!
(这是在ColdFusion 6服务器上)
答案 0 :(得分:2)
我建议:
ReplaceList(xml, " ,—,–", "#Chr(160)#,#Chr(8212)#,#Chr(8211)#")
维基百科似乎有a quite complete list of character entities及其字符代码。我会选择使用Chr()
来创建替换字符串,这样您就可以明确且独立于源代码文件编码。
答案 1 :(得分:1)
replace(xml, '&','&','all');
应该允许它被验证。您也可以使用DTD来定义这些字符,但正如您所说,您并不总是知道字符将是 - 我可能只是替换。
答案 2 :(得分:1)
这似乎是一个非常好的功能,删除扩展字符并用它们的HTML等效替换它们。
答案 3 :(得分:1)
请参阅此相关问题:Decode Numeric HTML Entities in ColdFusion?
使用它,然后使用XmlFormat(),然后使用XmlParse()它。
“nbsp不是5个预定义字符实体引用之一”,@stevenerat said。
答案 4 :(得分:1)
Yup,nbsp不是预定义的字符实体引用之一,需要使用xml format()进行转义,例如xmlparse(xmlformat(theString))。
http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references http://livedocs.adobe.com/coldfusion/7/htmldocs/00000668.htm
答案 5 :(得分:0)
更换“&amp;”使用"&"
然后在解析后再返回
<cfsavecontent variable="xmlString">
<event>Hello World&</event>
</cfsavecontent>
<cfset xmlString = Replace(xmlString, "&", "&", "all") />
<cfset doc = Xmlparse(xmlString) />
<cfset value = Replace(doc.event.xmlText, "&", "&","all") />
答案 6 :(得分:-2)
您可以查看XmlFormat()。易于使用:
<cfset string = XmlFormat(string)>