由于长UTF字符,XML格式不正确

时间:2012-05-02 10:14:37

标签: php xml character-encoding iconv

好的,我希望有人可以提供帮助,因为我无法为此找到解决方案。

在数据库中,客户设法导入或以其他方式添加来自不同字符集的字符数据,例如:

  <E2><80><99>

我相信这是UTF-16。

我的脚本的XML输出由于这些数据(从数据库中提取字符串,例如“description”字段并构建XML文件)而抛出错误。

XML解析错误:格式不正确 第20行,第50栏。

还有一些其他十六进制更长,例如&lt; 80&gt;&lt; 99&gt; (只是一个例子,我不确定这是否是一个真实的角色)。

如何使我的XML文件有效,并缩小字符集或让它像这样使用UTF-32:

  AddType "application/xml; charset=UTF-32" xml  (in .htaccess file along with filesmatch .xml)


  <?xml version='1.0' encoding='UTF-32' ?>   (placed in head of xml file)

1 个答案:

答案 0 :(得分:0)

无论是什么:UTF-8,-16或-32 - 如果您在输出中选择其他编码,则必须 - 如果不同 - 首先重新编码输入以进行输出。

您在问题中明确指出您不知道输入编码究竟是什么。这是你需要清楚直线的一点,因为编码是元信息。你需要正确地知道它来处理字符串。根据您的共享,看起来输入是UTF-8编码的。您应该验证(How to detect malformed utf-8 string in PHP?)。

接下来的事情是,格式错误绝不意味着编码问题(但它可以)。只要你不分享问题的根源(理想情况下也是文本形式旁边with a hex-dump),对于我所说的当前信息,没有太多的建议。