【问题标题】:XML not well formed due to long UTF characters由于长 UTF 字符,XML 格式不正确
【发布时间】:2012-05-02 10:14:36
【问题描述】:

好的,我希望有人能提供帮助,因为我还没有找到解决方案。

在数据库中,客户设法从不同的字符集中导入或添加字符数据,例如:

  <E2><80><99>

我相信这是 UTF-16。

我的脚本的 XML 输出由于此数据而引发错误(它从数据库中提取字符串,例如“描述”字段并构建 XML 文件)。

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

还有其他一些更长的十六进制,例如 (只是一个例子,我不确定这是否是一个实际字符)。

如何使我的 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)

【问题讨论】:

  • 0xe2 0x80 0x99 是“右单引号”(U+2019)的 UTF-8,我认为您的问题出在其他地方。你能告诉我们xml的前几行吗?
  • 您在哪里看到这些错误?您有示例网址吗?什么是第 20 行?第 50 列是什么?
  • 这里是一个例子:XML Parsing Error: not well-formed Location: x.x.x.x/xml/hal-default.xml Line Number 20, Column 50: Hangmans Creek Ranch is a 190 (特殊字符就在后面“190”)英亩牧场通过十六进制编辑器查看:0001140 3931 b130 6120 7263 2065 6172 636e 2068 1 9 0 1 sp a c r e sp r a n c h sp 这说明了什么吗?
  • 哪个程序给你这个错误?是PHP吗?如果有,相关的PHP代码是什么?
  • 在浏览器(在我的例子中是 FireFox 10)中查看 .xml 文件时会发生此错误,但其他浏览器也会发生此错误。

标签: php xml character-encoding iconv


【解决方案1】:

无论它是什么:UTF-8、-16 或 -32 - 如果您为输出选择其他编码,则必须(如果不同)首先重新编码您的输入以输出。

您在问题中明确表示您不知道输入编码到底是什么。这是您需要弄清楚的一点,因为编码是元信息。您需要正确了解它才能处理字符串。从您分享的内容来看,输入似乎是 UTF-8 编码的。您应该验证 (How to detect malformed utf-8 string in PHP?)。

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

【讨论】:

  • 这里是一个例子:XML Parsing Error: not well-formed Location: x.x.x.x/xml/hal-default.xml Line Number 20, Column 50: Hangmans Creek Ranch is a 190(特殊字符就在后面“190”)英亩牧场通过十六进制编辑器查看:0001140 3931 b130 6120 7263 2065 6172 636e 2068 1 9 0 1 sp a c r e sp r a n c h sp 这说明了什么吗?
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 2015-05-03
  • 2011-03-01
  • 2019-04-29
  • 2017-02-17
  • 1970-01-01
  • 2018-04-24
  • 2011-12-30
相关资源
最近更新 更多