我是 json_encoding
一些字符串。有时它们包含二进制数据。这会导致编码失败,并显示错误代码 JSON_ERROR_UTF8
。通过 utf8_encode 运行字符串可以解决此错误。但是,✓
(unicode 复选标记)被编码为 \u00e2\u009c\u0093
,当由 JavaScript 解释并在浏览器中呈现时,它实际上看起来像 â
.
我该如何解决这个问题?我可以使用其他编码吗?
<小时/>echo json_encode(utf8_encode('✓')); // "\u00e2\u009c\u0093"
现在按 F12 并将其粘贴到您的 JavaScript 控制台中(包括引号)。它应该输出â
。
请注意
echo json_encode('✓'); // "\u2713"
按预期工作。问题是有时字符串将包含json_encode
无法处理的二进制数据,因此我需要清理每个字符串而不破坏它可以 句柄。
更多示例:
json_encode(chr(200)); // false (bad)
json_encode(utf8_encode(chr(200))) // "\u00c8" (good)
json_encode('✓'); // "\u2713" (good)
json_encode(utf8_encode(chr(200))) // "\u00e2\u009c\u0093" (bad)
所以你看,编码对于某些字符串效果很好,但会破坏其他字符串。
这仅用于日志记录。我不在乎二进制数据是否奇怪,我只是不希望它与有效字符串混淆。
最佳答案
通过此函数运行字符串
function _utf8($str) {
if(!mb_check_encoding($str, 'UTF-8')) {
return utf8_encode($str);
}
return $str;
}
(取自 here 并修改)
似乎给出了我想要的结果。
复选标记被保留,但 chr(200)
和其他奇怪的内容被编码:
json_encode(utf8_encode(chr(200))) // "\u00c8"
关于javascript - Unicode 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434191/