0

我使用 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

4

2 回答 2

0

正如 Colin 在问题评论中指出的那样,问题最终成为 CDATA 标记中存在的非 ASCII 字符。

我急于解决这个问题,所以我只使用了蛮力方法,除了 utf8_encode() 之外,我还通过正则表达式替换运行了所有内容,我使用了:$output = preg_replace('/[^(\x20-\x7F)] */','', $输出); 我在这里找到了这个:http: //www.stemkoski.com/php-remove-non-ascii-characters-from-a-string/

感谢 Colin 和 Francis 的贡献。

于 2013-04-03T19:42:05.070 回答
0

某些字符在 XML 中是完全不允许的,即使在 CDATA 部分中,甚至是实体编码的。

您也许可以在 UTF-8 字符串(未经测试)上使用它:

$xml_legal_chars = preg_replace('/[\x{00}-\x{08}\x{0B}\x{0C}\x{0E}-\x{1F}\x{D800}-\x{DFFF}\x{FFFE}\x{FFFF}]/u', '', $utf8string);
于 2013-04-03T19:55:06.910 回答