【发布时间】:2015-03-30 04:48:17
【问题描述】:
我有一个从用户输入的数据生成的 RSS 提要。有很多用户用日语输入文本,而且大多数时候都没有问题。但是,有一个特定的 RSS 提要显示错误:
error on line 25 at column 25: Input is not proper UTF-8, indicate encoding !
Bytes: 0x0B 0x32 0x38 0x20
请注意,在这个特定的 RSS 提要中,这不是第一个出现日文字符的地方。
我已经看到其他答案 Error: "Input is not proper UTF-8, indicate encoding !" using PHP's simplexml_load_string 建议尝试更改编码或类似的东西,但我很困惑为什么编码只在这个特定的提要上失败,而且,如果是因为这个人输入以不同方式编码的日语,我如何检测某人何时以不同方式输入,并仅选择性地修复可能导致问题的那些。
我尝试添加以下内容:
if (!mb_check_encoding($content, "UTF-8")) {
$content = mb_convert_encoding($content, "UTF-8",
"Shift-JIS, EUC-JP, JIS, SJIS, JIS-ms, eucJP-win, SJIS-win, ISO-2022-JP,
ISO-2022-JP-MS, SJIS-mac, SJIS-Mobile#DOCOMO, SJIS-Mobile#KDDI,
SJIS-Mobile#SOFTBANK, UTF-8-Mobile#DOCOMO, UTF-8-Mobile#KDDI-A,
UTF-8-Mobile#KDDI-B, UTF-8-Mobile#SOFTBANK, ISO-2022-JP-MOBILE#KDDI");
}
但是,它仍然报告未正确编码为 utf8。
Edit2:所以,我非常困惑,因为我刚刚让它记录了 mb_detect_encoding 认为文本是什么编码,并且它都以 ASCII 的形式返回(必须是其他字段,因为日语不能是 ASCII,显然),和 UTF-8。你知道为什么它可以认为它是 UTF-8,但仍然出现这些编码错误吗?
【问题讨论】:
-
您错过了在问题中显示实际提要。可能是您的提要中的 XML 已经损坏,因此如果没有先前的修复,任何标准 XML 解析器都不会吃掉它。
-
绝对不是损坏的 XML。目前我怀疑用户输入的文本有些奇怪。我尝试复制/粘贴到开放式办公室,然后不做任何编辑,复制/粘贴回应用程序,再次生成 RSS 提要,并且成功了。
-
如果用户能够输入文本并且输入的文本是错误处理的,则创建了无效的 XML RSS 提要,那么实际上 XML 已损坏。当然,XML 本身并没有损坏(而是输入的数据),但是 XML 损坏确实是您看到的错误消息。所以首先你必须看到这里有一个错误是有原因的。
-
有问题的文本只包含日文字符。它不会导致格式错误的 XML。
-
你找错树了。 XML 已损坏这就是您看到错误消息的原因。字符编码是 XML 文档的一部分,规范在这里:w3.org/TR/REC-xml/#charsets
标签: php xml character-encoding rss