解码JSON + PHP有问题

时间:2013-02-24 20:52:39

标签: php json

我的php脚本为JSON提供了这个字符串(例如):

{“time”:“0:38:01”,“kto”:“\ u00d3 \ u00e1 \ u00e2 \ u00e2 \ u00e0 \ u00c5 \ u00e5 \ u00ed \ u00e5 \ u00f0 \ u00e0 \ u00eb \ u00ee \ u00e2“,”mess“:”\ u00c5 \ u00e4 \ u00e8 \ u00ed \ u00fb \ u00e9:* mm“}

jQuery代码通过JSON获取此字符串:

$.getJSON('chat_ajax.php?q=1',
    function(result) {
    alert('Time ' + result.time + ' Kto' + result.kto + ' Mess' + result.mess);
    });

浏览器显示:

0:38:01 Óáèâöà Ãåíåðàëîâ
Åäèíûé: *mm

如何将此字符串解码为西里尔字母?

尝试使用:

<META http-equiv="content-type" content="text/html; charset=windows-1251">

但没有任何改变

PHP代码:

 $res1=mysqli_query($dbc, "SELECT * FROM chat ORDER BY id DESC LIMIT 1");
   while ($row1=mysqli_fetch_array($res1)) {
       $rawArray=array('time' => @date("G:i:s", ($row1['time'] + $plus)), 'kto' => $row1[kto], 'mess' => $row1[mess]);
       $encodedArray = array_map(utf8_encode, $rawArray); 
       echo json_encode($encodedArray); 

PHP ver 5.3.19

2 个答案:

答案 0 :(得分:2)

\uXXXX代表 unicode 字符,而unicode 00d3代表Ó,依此类推。 Unicode字符是unambigouos,因此页面的字符编码将被忽略。您可以使用正确的unicode(即\u0443作为У)或编写脚本,以便输出Windows-1251中的真实字符而不是unicode序列。

<强>更新

我从您的评论中看到您从MySQL获取此数据并使用json_encode()输出它。 json_encode仅适用于UTF-8编码数据(并且d3也是Ó UTF-8,这就是你得到错误的unicode序列的原因。)

因此,您需要将所有数据从Windows-1251转换为UTF-8 ,然后再将其传递给json_encode,然后其他所有数据都能正常运行。

转换:

$utf8Array = array_map(function($in) {
    return iconv('Windows-1251', 'UTF-8', $in);
}, $rawArray);

utf8_encode不起作用,因为它仅对ISO-8859-1编码中的输入有用。

答案 1 :(得分:0)

在MySQL BDD中存储json数据时遇到了类似的问题:这解决了这个问题:

json_encode($ json_data,JSON_UNESCAPED_UNICODE);