【发布时间】:2013-04-03 18:49:25
【问题描述】:
我使用 DOMDocument 类在 PHP 中生成了一个 XML 文件,数据是从 MySQL 数据库中获取的。很多数据都包含 HTML 标记,但我已将其全部封装在 CDATA 部分中。
起初该文件有很多编码错误,但在将其放入文件之前通过 utf8_encode() 运行所有内容似乎已经修复了除一个之外的所有错误。
这是我现在遇到的错误:
error on line 5113 at column 450: Input is not proper UTF-8, indicate encoding !
Bytes: 0x14 0x31 0x30 0x30
我在这里发现了一些类似错误的帖子,但没有一个解决了我的问题,或者建议使用 utf_encode()。这是似乎触发错误的部分:
...quiet portable package. ]]></Summary><Features><![CDATA[The EF4500iSE was designed for maximum fuel...
错误似乎在 CDATA[ 和 The 之间,虽然我看不到那里的任何字符,并且该部分与文件中的每个其他 CDATA 块相同。如果我删除整个 Features 元素及其内容,则文件加载正常。
这是文件的链接:http://test.hhdev.hothousemarketing.com/inventory.xml
【问题讨论】:
-
在那个特定的 CDATA 标签中,“rpm”和“1000”之间似乎有一个奇怪的字符。你试过
utf8_encode吗? -
是的,我输入的所有内容都首先通过 utf8_encode()
-
是的,删除你提到的字符修复它,现在可以在生成文件时在 PHP 中删除它?
-
蛮力方法是对非 ASCII 字符进行正则表达式替换——尽管我个人不喜欢这种解决方案。老实说,这有点取决于您的应用程序
-
您应该从源数据中删除垃圾字符(字节
0x14)。它没有业务存在。如果您使用createTextNode()而不是createCDATASection(),那么您至少会在保存文档而不是解析文档时收到这些字符的警告。