我正在使用XMLFormat()为XML文档编码一些文本。但是,当我去读取我创建的XML文件时,我得到一个无效的字符错误。为什么XMLFormat()没有正确编码所有字符?
我正在运行CF8。
答案 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中使用外语,直到我输入正确的字符集才能正确解析...