3

私の php スクリプトは、JSON に対して次の文字列 (たとえば) を提供します。

{"time":"0:38:01","kto":"\u00d3\u00e1\u00e8\u00e2\u00f6\u00e0 \u00c3\u00e5\u00ed\u00e5\u00f0\u00e0\u00eb\u00ee\u00e2", "混乱":"\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 バージョン 5.3.19

4

2 に答える 2

2

\uXXXXUnicode文字を表し、Unicodeでは00d3isÓなどです。Unicode文字は明確であるため、ページの文字エンコードは無視されます。正しいUnicode(つまり\u0443、for У)を使用するか、Unicodeシーケンスの代わりにWindows-1251で実際の文字を出力するようにスクリプトを作成することができます。

アップデート

あなたのコメントから、MySQLからこのデータをフェッチし、json_encode()それを出力するために使用していることがわかります。json_encodeUTF-8でエンコードされたデータに対してのみ機能します( UTF-8にもd3ありÓます。これが、間違ったUnicodeシーケンスを取得する理由です)。

したがって、に渡す前に、すべてのデータをWindows-1251からUTF-8に変換する必要がありますjson_encode。そうすれば、他のすべてが正常に機能します。

変換:

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

utf8_encodeISO-8859-1エンコーディングでの入力にのみ役立つため、機能しません。

于 2013-02-24T21:26:15.630 に答える