【问题标题】:JavaScript JSON.parse UTF-8 problemsJavaScript JSON.parse UTF-8 问题
【发布时间】:2013-08-16 01:40:21
【问题描述】:

我有一个通过 AJAX 向 php 文件发出请求的页面,该 AJAX 文件显示一个 JSON 作为响应,我遇到了一些问题。

这导致我的页面使用 UTF-8 字符集来显示一些特殊字符等;我的 AJAX 文件默认使用 ANSI 编码,但后来我决定将其更改为 UTF-8 以获取正确的符号,但是当我使用 JSON.parse 时,它​​会抛出错误“Uncaught SyntaxError: Unexpected token”,(如果AJAX 文件编码为 UTF-8),然后我更改为 ANSI 而且效果很好,我不知道 JSON 为什么会有这种行为。

当我查看 ANSI 和 UTF-8 的输出 (xhr.responseText) 时,它们是相同的(我什至没有在 UTF-8 中使用特殊字符)。

也许 JSON.parse 不接受来自 UTF-8 文件的响应(我不相信),还是我必须设置一个标题才能解决这个问题?你们怎么看?谢谢。。

【问题讨论】:

    标签: javascript ajax json character-encoding xmlhttprequest


    【解决方案1】:

    我也遇到过同样的问题。我使用了以下编码函数而不是默认的编码函数。它给了我完美的结果

    function json_encode_utf8($arr) {
      array_walk_recursive($arr, 'encode_utf8');
      return mb_decode_numericentity(json_encode($arr), array(0x80, 0xffff, 0, 0xffff), 'UTF-8');
    }
    
    function encode_utf8(&$item, $key) {
      if (is_string($item))
        $item = mb_encode_numericentity($item, array(0x80, 0xffff, 0, 0xffff), 'UTF-8');
    }
    
    $group_members = array('Matthias  Schöbe');
    
    $group_members_json = json_encode_utf8($group_members);
    

    【讨论】:

    • 这些是 PHP 函数,请考虑对 JS 问题给出完整的 JS 答案。
    • 你必须在服务器端这样做
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 2015-01-19
    • 2017-07-16
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多