【发布时间】:2016-04-27 12:24:12
【问题描述】:
函数json_encode 需要有效的UTF-8 字符串。我有一个可能采用不同编码的字符串。我需要忽略或替换所有无效字符才能转换为 JSON。
- 它应该是非常简单和健壮的东西。
- 错误出在手动检查的模块中,所以 mojibake 没问题。
- 负责修复编码的代码位于不同的模块中。 (不过它坏了。)我不想重复责任。
无效字符串示例的十六进制表示:496e76616c6964206d61726b2096
我目前的解决方案:
$raw_str = hex2bin('496e76616c6964206d61726b2096');
$sane_str = @\iconv('UTF-8', 'UTF-8//IGNORE', $raw_str);
我的代码的三个问题:
-
iconv看起来有点太重了。 - 很多程序员不喜欢
@。 -
iconv可能忽略太多:整个字符串。
有更好的主意吗?
有类似的问题,Ensuring valid UTF-8 in PHP,但我不关心转换。
【问题讨论】:
-
如果你不关心转换......那你想做什么?
-
我需要一个有效的 UTF-8 字符串用于 json_encode。有效的 mojibake 很好。就是这样。
-
老实说,您的解决方案是我能看到的最干净的解决方案。如果您不想使用
@,您可能希望通过编码检查运行字符串,这很麻烦。
标签: php utf-8 sanitization