3

我们调用一个返回 XML 格式数据字符串的 API。我们想通过 XMLParse() 将此字符串转换为 ColdFusion XML 对象。当特殊字符出现在数据值中时会出现问题。例如,像这样的字符:

  — –

(是的,原始数据将它们包含在它们的 HTML 编码等效项中)。在执行 XMLParse() 时,它会在这些编码字符上引发错误。这是一个会出错的示例:

我们字符串的一部分: <event>Hello &nbsp; World</event>

错误: Reference to undefined entity "&nbsp;"

使这些字符与 XMLParse() 兼容的最佳方法是什么?更重要的是——如果我们不总是知道角色会是什么,我们怎么能做到这一点?

谢谢!

(这是在 ColdFusion 6 服务器上)

4

7 回答 7

2

我会推荐:

ReplaceList(xml, "&nbsp;,&mdash;,&ndash;", "#Chr(160)#,#Chr(8212)#,#Chr(8211)#")

维基百科似乎有一个相当完整的字符实体列表及其字符代码。我会选择使用Chr()来创建替换字符串,这样您就可以明确且独立于源代码文件编码。

于 2009-11-04T18:07:45.190 回答
1
replace(xml, '&','&amp;','all');

应该允许它被验证。您也可以使用 DTD 来定义这些字符,但正如您所说,您并不总是知道这些字符将是 - 我可能只是进行替换。

于 2009-11-04T17:05:09.793 回答
1

这似乎是一个很好的功能,可以删除扩展字符并将其替换为 HTML 等价物。

http://www.petefreitag.com/item/202.cfm

于 2009-11-04T19:32:36.010 回答
1

请参阅此相关问题:在 ColdFusion 中解码数字 HTML 实体?

使用它,然后是 XmlFormat() 它,然后是 XmlParse() 它。

“nbsp 不是 5 个预定义的字符实体引用之一”,@stevenerat 说

于 2009-11-04T20:15:36.657 回答
1

是的,nbsp 不是预定义的字符实体引用之一,需要使用 xmlformat() 进行转义,例如 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

于 2009-11-04T20:18:03.570 回答
0

解析后用“&”替换"&amp;"然后再返回似乎有效

<cfsavecontent variable="xmlString">
    <event>Hello&nbsp;World&amp;</event>
</cfsavecontent>
<cfset xmlString = Replace(xmlString, "&", "&amp;", "all") />
<cfset doc = Xmlparse(xmlString) />
<cfset value = Replace(doc.event.xmlText, "&amp;", "&","all") />
于 2009-11-04T20:57:13.863 回答
-2

你可以看看XmlFormat()。便于使用:

<cfset string = XmlFormat(string)>
于 2009-11-04T17:50:47.033 回答