$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<这个例子只是为了澄清。
答案 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'];