JSON解码中的阿拉伯字符

时间:2013-02-20 12:56:47

标签: php json

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

作为此代码的结果,输出为:"\u0628\u0633\u0645 \u0627\u0644\u0644\u0647",而它应该类似于“بسمالله”。在进行JSON编码时会对阿拉伯字符进行编码,而在Youtube API中则不是这种情况: http://gdata.youtube.com/feeds/api/videos/RqMxTnTZeNE?v=2&alt=json

您可以在Youtube上看到阿拉伯字符正确显示。可能是我的错误?

提示:我正在研究API<这个例子只是为了澄清。

4 个答案:

答案 0 :(得分:27)

"\u0628\u0633\u0645 \u0627\u0644\u0644\u0647""بسم الله"在JSON中是等效的。

PHP只是默认使用Unicode转义而不是多字节字符的文字。

您可以使用JSON_UNESCAPED_UNICODE指定其他方式(假设您使用的是PHP 5.4或更高版本)。

json_encode('بسم الله', JSON_UNESCAPED_UNICODE);

答案 1 :(得分:2)

这是UTF-8字符串的正确JSON编码版本。无需更改它,它代表正确的字符串。 JSON中的字符可以通过这种方式进行转义。

如果您愿意,JSON 可以直接表示UTF-8字符。从PHP 5.4开始,您可以选择设置JSON_UNESCAPED_UNICODE标志以生成原始UTF-8字符串:

json_encode($string, JSON_UNESCAPED_UNICODE)

但这只是一种偏好,没有必要。

答案 2 :(得分: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或更高版本。

答案 3 :(得分:2)

好吧,如前所述,无关紧要,因为两个字符串都是等价的。 但是你应该做的是确保编码的字符串在发送到输出之前被解码。

echo json_decode($test);

或者因为JSON很可能只包含一个字符串:

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

$test = json_encode($obj);

$testobject = json_decode($test);
echo $testobject['arabic'];