3

我试图生成一个大约 23 到 30 MB 的 XML 文档,当我用 Firefox 打开它时,我收到

XML Parsing Error: not well-formed
Location: file:///Users/User/Downloads/export(2).xml
Line Number 137725, Column 1343:

之后,我尝试使用验证文档XML Nanny并收到以下错误:

Invalid Character (Unicode: 0xB)

在几 (13) 条线路上:137725、137738、137751、137764、137777、137790、137803、137816、146834、189949、193444、193457、193470

我尝试了几种“解决方案”,其中包括:

  1. 正则表达式:

    preg_replace(
      '/[^\x9\xA\xD\x20-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]+/'
      , ' ', $data->Description);
    

    这里的问题是我不太确定这是有效的正则表达式,因为我收到内部服务器错误,因为我们的 apache 中启用了 mod 安全性。

  2. 我试图用 BOM 将我的文件保存为 UTF-8,但那是绝望的尝试

  3. 我尝试将 iconv 与 'UTF-8//IGNORE' 一起使用,但这并没有帮助

  4. 我尝试使用逐个字符替换,但这不适用于我的文件,因为我有 230k 行..即使我替换了我遇到问题的特定标签,我也会在 php 中触发 max_execution_time 指令和我的脚本被杀了。

目前我的解决方案是手动清除此无效字符的数据库记录,但这现在是解决我的问题的正确和正确的解决方案,因为将来此脚本将用于自动执行此导出,并且手动编辑不是选项或演讲主题。

4

2 回答 2

2

我首先要坚持 XML Nanny 提供的信息:

Invalid Character (Unicode: 0xB) (several lines)

0xB 是控制字符范围中的一个字符,但在 XML 文档中只允许非常有限的控制字符。我建议你开始用数字实体替换那些,然后再试一次:

$xml = strtr($xml, array("\x0B" => ""));

Firefox 可能会接受这些。

于 2012-04-10T20:22:05.287 回答
1

我曾经遇到过类似的问题。我所做的是在通过 XML 发送数据之前使用 base64encode 对数据进行加密,然后在收到数据后对其进行解码。告诉我这是否适合你。或者如果我没有清楚地理解你的问题?

于 2012-04-11T08:48:49.007 回答