Coldfusion XMLFormat()不转换所有字符

时间:2009-11-06 19:44:01

标签: xml encoding coldfusion

我正在使用XMLFormat()为XML文档编码一些文本。但是,当我去读取我创建的XML文件时,我得到一个无效的字符错误。为什么XMLFormat()没有正确编码所有字符?

我正在运行CF8。

6 个答案:

答案 0 :(得分:5)

您确定以正确的编码输出文件吗?你不能只做

<cffile action="write" file="foo.xml" output="#xml#" />

因为结果很可能与您的XML所在的字符集不同。除非另有说明(通过编码声明),XML文件将被视为UTF-8,您应该这样做:

<cffile action="write" file="foo.xml" output="#xml#" charset="utf-8" />
<!--- and --->
<cffile action="read" file="foo.xml" variable="xml" charset="utf-8" />

答案 1 :(得分:5)

我觉得这是XMLFormat中的一个错误。我不确定下面的片段的原始作者是谁,但这里是一种通过正则表达式捕获额外字符的方法......

  <cfset myText = xmlFormat(myText)>

  <cfscript>
      i = 0;
      tmp = '';
      while(ReFind('[^\x00-\x7F]',myText,i,false))
      {
        i = ReFind('[^\x00-\x7F]',myText,i,false); // discover high chr and save it's numeric string position.
        tmp = '&##x#FormatBaseN(Asc(Mid(myText,i,1)),16)#;'; // obtain the high chr and convert it to a hex numeric chr.
        myText = Insert(tmp,myText,i); // insert the new hex numeric chr into the string.
        myText = RemoveChars(myText,i,1); // delete the redundant high chr from string.
        i = i+Len(tmp); // adjust the loop scan for the new chr placement, then continue the loop.
      }
      return myText;
  </cfscript>

答案 2 :(得分:0)

不要忘记将&lt; cfprocessingdirective pageencoding =“utf-8”&gt;在你的模板上。

答案 3 :(得分:0)

如果您尝试将XML直接返回到浏览器,您可能想尝试类似用户下载它

<cfheader name="Content-Disposition" charset="utf-8" value="attachment; filename=export.xml">
<cfcontent variable="#someXMLPacket#" type="text/xml"  reset="true">

或者,如果你想将它作为一个网页(ala REST)返回,那么这应该是诀窍

<cfheader charset="utf-8">
<cfcontent variable="#someXMLPacket#" type="text/xml"  reset="true">

希望有所帮助

答案 4 :(得分:0)

不幸的是,XMLFormat并不是一个包罗万象的解决方案。它有一个非常有限的字符列表,它将替换[documentation]。

您需要对XML无效但XMLFormat未涵盖的字符进行自定义编码。

它绝对不是非常有效,但一个潜在的解决方案是循环遍历通常可疑字段的内容(任何用户生成的,对于初学者而言)逐个字符,检查ascii代码,以及它是否高于255 ,要么省略字符,要么正确编码。

答案 5 :(得分:0)

这对我来说也是一个很大的问题,结果是charset是主要因素,你需要明确指出正确的字符集。

对我来说,我在xml中使用外语,直到我输入正确的字符集才能正确解析...