19
$test = json_encode('بسم الله');
echo $test;

このコードの結果、出力は次の"\u0628\u0633\u0645 \u0627\u0644\u0644\u0647"ようになります。「بسمالله」のようになります。Youtube APIではJSONエンコード時にアラビア文字がエンコードされますが、そうではありません:http: //gdata.youtube.com/feeds/api/videos/RqMxTnTZeNE?v= 2&alt=json

Youtubeでアラビア文字が正しく表示されていることがわかります。私の間違いは何でしょうか?

ヒント:私はAPIに取り組んでいます<例は明確にするためのものです。

4

4 に答える 4

37

"\u0628\u0633\u0645 \u0627\u0644\u0644\u0647""بسم الله"JSON では同等です。

PHP は、デフォルトでマルチバイト文字のリテラルの代わりに Unicode エスケープを使用するだけです。

それ以外の場合はJSON_UNESCAPED_UNICODEで指定できます(PHP 5.4 以降を使用している場合)。

json_encode('بسم الله', JSON_UNESCAPED_UNICODE);
于 2013-02-20T13:04:29.970 に答える
2

さて、前に述べたように、両方の文字列は同等であるため、それは問題ではありません。ただし、出力に送信する前に、エンコードされた文字列がデコードされていることを確認する必要があります。

echo json_decode($test);

または、JSONには1つ以上の文字列が含まれている可能性が高いため、次のようになります。

$obj['arabic'] = 'بسم الله';
$obj['latin'] = 'abcdef';
$obj['integer'] = 12345;

$test = json_encode($obj);

$testobject = json_decode($test);
echo $testobject['arabic'];
于 2013-02-20T13:37:08.260 に答える
2

これは、UTF-8文字列の正しいJSONエンコードバージョンです。変更する必要はありません。正しい文字列を表します。JSONの文字はこの方法でエスケープできます。

JSONは、必要に応じてUTF-8文字を直接表すことができます。PHP 5.4以降、JSON_UNESCAPED_UNICODE生のUTF-8文字列を生成するフラグを設定するオプションがあります。

json_encode($string, JSON_UNESCAPED_UNICODE)

しかし、それは単なる好みであり、必要ではありません。

于 2013-02-20T13:05:47.813 に答える
2

どちらの形式も有効で同等のJSON文字列です。

char
    any-Unicode-character-
        except-"-or-\-or-
        control-character
    \"
    \\
    \/
    \b
    \f
    \n
    \r
    \t
    \u four-hex-digits

エンコードされていないバージョンが必要な場合は、JSON_UNESCAPED_UNICODEフラグを追加するだけです。

<?php

$test = json_encode('بسم الله', JSON_UNESCAPED_UNICODE);
echo $test;

このフラグにはPHP/5.4.0以降が必要です。

于 2013-02-20T13:06:31.547 に答える