javascript - Unicode 编码字符串

标签 javascript php json

我是 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/

相关文章:

javascript - 如何通过我的 chrome 扩展程序注入(inject)的脚本访问 jQueryUI slider ?

javascript - 使用 Snap.svg 的基本旋转

javascript - 维埃。 v-if 中的动态变量

php - 事务隔离的需求和范围 - MySQL

arrays - 非法字符串偏移 'option 1'

Python 将保存为字符串的 OrderedDict 转换为实际的字典

java - 如何使用 Jackson 将 JSON 数组中的子文档表示为 Java Collection?

javascript - 与未定义的比较

php - $_GET 在 php 中不返回任何值

java - 如何为此 REST 响应编写 getter setter 类以进行改造