我找不到解决办法。
我有一个API女巫给我JSON resposne,
http://api.vajehyab.com/v2/public/?q=%D8%B3%D9%84%D8%A7%D9%85&developer=stackoverflow
是这样的,
{ “搜索”:{ “Q”: “\ u0633 \ u0644 \ u0627 \ u0645”, “代码”:200}, “数据”:{ “标题”: “\ u0633 \ u0644 \ u0627 \ u0645” ,“发音”:“”,“文字”:“(\ u0633 \ u064e)[\ u0639。](\ u0645 \ u0635 \ u0644。)1 - \ u062f \ u0631 \ u0648 \ u062f \ u06af \ u0641 \ u062a \ u0646.2 - \ u0628 \ u06cc \ u06af \ u0632 \ u0646 \ u062f \ u0634 \ u062f \ u0646.3 - \ u06af \ u0631 \ u062f \ u0646 \ u0646 \ u0647 \ u0627 \ u062f \ u0646。\ u061b~ \ u0639 \ u0644 \ u06c \ u06a \ u06c \ u0628 \ u0628 \ u0628 \ u0628 \ u062a \ u0628 \ u062a \ u062a \ u0628 \ u0627 \ u062f。\ u061b~ \ u0639 \ u0644 \ u06cc \ u06a9 \ u0645 \ u062f \ u0631 \ u0648 \ u062f \ u0628 \ u0631 \ u0634 \ u0645 \ u0627。“,”来源“:”\ u0641 \ u0631 \ u0647 \ u0646 \ u06af \ u0641 \ u0627 \ u0633 \ u0633 \ u06cc \ u0645 \ u0639 \ u06> \ u0646 \ u0646 \ u0648 \ u0628 “永久链接”:“?q =%D8%B3%D9%84%D8%A7%D9%85”},“错误”:{“message”:“” “原因”: “”}, “广告”:{ “文本”: “”, “URL”: “”}}
它似乎没有问题,我可以在其他工具中解码它但PHP,我无法用PHP解码它
$json = file_get_contents('http://api.vajehyab.com/v2/public/?q='.urlencode('سلام').'&developer=stackoverflow');
var_dump(json_decode($json)); // null
我希望有人可以帮我这个, 谢谢......
答案 0 :(得分:3)
取自php docs http://php.net/manual/bg/function.json-last-error.php 运行此代码,如果您收到任何错误,请告诉我们。
json_decode($string);
switch(json_last_error())
{
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_NONE:
echo ' - No errors';
break;
}
答案 1 :(得分:2)
EDIT2:在PHP 5.3+中,这似乎也有效:
$json = file_get_contents('http://api.vajehyab.com/v2/public/?q='.urlencode('سلام').'&developer=stackoverflow');
$unescaped = json_encode(preg_replace_callback('/\\\\u(\w{4})/', function ($matches) {
return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $json));
var_dump($unescaped);
取自:https://stackoverflow.com/a/24933162/2433843
EDIT3:将preg_replace_callback
包裹在json_encode
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为问题来自file_get_contents
函数。当输入为字符串时,json_decode
正常工作。下面的代码运行正确。
$json = '{"search":{"q":"\u0633\u0644\u0627\u0645","code":200},"data":{"title":"\u0633\u0644\u0627\u0645","pronunciation":"","text":"(\u0633\u064e) [ \u0639 . ] (\u0645\u0635 \u0644 .) 1 - \u062f\u0631\u0648\u062f \u06af\u0641\u062a\u0646 . 2 - \u0628\u06cc \u06af\u0632\u0646\u062f \u0634\u062f\u0646 . 3 - \u06af\u0631\u062f\u0646 \u0646\u0647\u0627\u062f\u0646 . \u061b ~ \u0639\u0644\u06cc\u06a9 \u062f\u0631\u0648\u062f \u0628\u0631 \u062a\u0648 \u0628\u0627\u062f. \u061b ~ \u0639\u0644\u06cc\u06a9\u0645 \u062f\u0631\u0648\u062f \u0628\u0631 \u0634\u0645\u0627. ","source":"\u0641\u0631\u0647\u0646\u06af \u0641\u0627\u0631\u0633\u06cc \u0645\u0639\u06cc\u0646 | \u0648\u0627\u0698\u0647 \u06cc\u0627\u0628","permalink":"?q=%D8%B3%D9%84%D8%A7%D9%85"},"error":{"message":"","reason":""},"ads":{"text":"","url":""}}';
var_dump(json_decode($json));
答案 4 :(得分:0)
请在通过json_encode()php函数对数据进行编码之前将数据编码为utf8格式。我希望,这有帮助。 [函数utf8_encode()]