json编码utf8错误

时间:2015-05-12 16:25:26

标签: php json utf-8

我有使用json_encode

编码此字符的问题

http://www.fileformat.info/info/unicode/char/92/index.htm

首先它给了我这个错误 JSON_ERROR_UTF8是

'格式错误的UTF-8字符,可能编码错误'

在json_encode

之前尝试了这个函数utf8_encode()

现在返回此结果' \ u0092'

所以我找到了这个

 function jsonRemoveUnicodeSequences($struct) {
        return preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
    }

角色出现但与其他人

Â’

还尝试htmlentities然后html_entity_decode

没有结果

2 个答案:

答案 0 :(得分:2)

json_encode()需要输入

  • integer,float,boolean
  • 字符串编码为UTF-8
  • 实现JsonSerializable的对象(或者不管它叫什么,我都懒得查找它)
  • JSON可编码对象的数组
  • JSON可编码对象的stdClass实例

因此,如果您有一个字符串,则必须先将其转码为UTF-8。正确的工具是iconv库,但您需要知道字符串当前具有哪种编码才能正确转码。

您递归转码数组或对象的方法应该有效,但我强烈建议不要在内部使用除UTF-8之外的任何内容。如果您有一个接口,您必须接受不同的编码,请立即验证并拒绝并使用UTF-8。类似地,在回复时,保持UTF-8直到最后可能仍然发出编码问题信号的点。

答案 1 :(得分:0)

如果查看字符U + 0092中包含的链接,它是一个控制字符,它也称为PRIVATE USE TWO。它存在于你的字符串中意味着你的字符串几乎肯定不是UTF-8字符串。相反,它可能是特定于Windows的编码,如果您的文本是英文,可能是Windows-1252,其中0x92是“智能引号”撇号,也称为右单引号。这个字符的Unicode等价物是U + 2019。

因此,您的数据源未提供UTF-8文本。您可以将源数据修复为UTF-8编码,也可以转换您收到的文本。例如,

的输出
echo iconv('Windows-1252','UTF-8', "\x92")

这可能就是你想要的。但是,您要确保所有输入都是相同的编码。如果您的某些数据是UTF-8而某些数据是Windows-1252,则上述iconv调用将正确处理Windows-1252编码的撇号,但它会将UTF-8编码的撇号转换为

’