【问题标题】:RSS feed encodingRSS 提要编码
【发布时间】: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 建议尝试更改编码或类似的东西,但我很困惑为什么编码只在这个特定的提要上失败,而且,如果是因为这个人输入以不同方式编码的日语,我如何检测某人何时以不同方式输入,并仅选择性地修复可能导致问题的那些。

编辑:根据这篇文章:http://www.localizingjapan.com/blog/2012/01/30/detecting-and-conveting-japanese-multibyte-encodings-in-php/

我尝试添加以下内容:

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


【解决方案1】:

确保您已将用户输入正确编码为 UTF-8。

http://php.net/manual/de/function.utf8-encode.php

string utf8_encode ( string $data )

【讨论】:

  • 不行,只是将它包裹在用户输入周围会使日语不再正确显示,并且 rss 提要仍然报告编码不正确。
  • 只是为了好玩而扔掉函数?从问题的第一句话开始:“有很多用户正在输入日语文本” - utf8_encode 尚未为日语文本创建。
  • 是的,只是为了好玩。你是认真的吗?我想帮忙,但你的回答毫无意义。搜索解决方案或停止回答此内容。
  • 我想用评论说的是:utf8_encode 在问题的上下文中 从不 是一个有用的功能。您的回答表明并非如此,因此没有帮助。除了功能建议之外,您的回答在技术上似乎并没有很大错误,但显然提出问题的人不知道如何实际实现这一目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多