Javascript Unicode编码字符串
我正在对一些字符串进行Javascript Unicode编码字符串,javascript,php,json,Javascript,Php,Json,我正在对一些字符串进行json\u编码。有时它们包含二进制数据。这会导致编码失败,错误代码为JSON\u error\u UTF8。通过utf8\u encode运行字符串可以绕过此错误。但是,✓(一个unicode复选标记)被编码为\u00e2\u009c\u0093,当JavaScript解释并在浏览器中呈现时,它实际上看起来像– 我怎样才能解决这个问题?我可以使用其他编码吗 现在按F12并将其粘贴到JavaScript控制台(包括引号)。它应该输出– 请注意 echo json_enc
json\u编码。有时它们包含二进制数据。这会导致编码失败,错误代码为JSON\u error\u UTF8
。通过utf8\u encode
运行字符串可以绕过此错误。但是,✓
(一个unicode复选标记)被编码为\u00e2\u009c\u0093
,当JavaScript解释并在浏览器中呈现时,它实际上看起来像–
我怎样才能解决这个问题?我可以使用其他编码吗
现在按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)
所以你看,对一些字符串进行编码效果很好,而对另一些字符串进行编码则会中断
这是严格的日志记录。我不在乎二进制数据是否奇怪,我只是不希望它与有效字符串混淆。编辑:这个问题无法回答。编码任意二进制数据是一回事,保持UTF-8字符的完整性是完全独立的。如何阻止字节序列0xe29c93
被解释为✓代码>当它显示在二进制数据中时
根据PHP参考页面,您可以使用以下语法对Unicode字符进行编码:
json_encode($data, JSON_UNESCAPED_UNICODE);
它应该使它通过unescaped传递unicode字符。通过此函数运行字符串
function _utf8($str) {
if(!mb_check_encoding($str, 'UTF-8')) {
return utf8_encode($str);
}
return $str;
}
(摘自并修改自)
似乎给出了我想要的结果
复选标记被单独留下,但是chr(200)
和其他奇怪的东西被编码:
json_encode(utf8_encode(chr(200))) // "\u00c8"
你能展示一下你的PHP和JS代码吗?也许问题出在文档字符集中。您是否尝试在HTML文档的头部添加
?@hek2mgl我基本上是给您的,但是我更新了问题。这个问题无法回答。编码任意二进制数据是一回事,保持UTF-8字符的完整性是完全独立的。如何阻止0xe29c93
被解释为✓ 当它显示在二进制数据中时?chr(200)
不是一个有效的unicode图表,它已经存在了。不起作用:json\u encode(chr(200),json\u UNESCAPED\u UNICODE)
产生false.re:“什么是停止…”我并不在乎它是否出现在我的二进制数据中。对于无法处理的数据,我只需要它不中断(返回false)。@标记,然后将其转换为它始终能够处理的编码。例如,base64对其进行编码。这将使有效字符串难以辨认。它是用来记录日志的。我希望能够读取有效字符串。我将在视觉上忽略任何二进制数据。
json_encode(utf8_encode(chr(200))) // "\u00c8"