我有一个代码喜欢这个
<?php
$jsonurl = "http://api.tamilmagazine.com/";
$json = file_get_contents($jsonurl,0,null,null);
$json_output = json_decode($json);
print_r($json_output);
?>
上面的代码返回一个 json 响应。
stdClass Object
(
[mag_id] => 1
[mag_name] => ஆனநà¯à®¤ விகடனà¯
[sid] => 544
[bpath] => http://www.tamilmagazine.com/
[api_path] => http://api.tamilmagazine.com/
[categories] => Array
(
[0] => stdClass Object
(
[cat_id] => 25
[cat_name] => அரசியலà¯
[articles] => Array
(
[0] => stdClass Object
(
[aid] => 20053
[a_title] => தலையஙà¯à®•à®®à¯ - கறà¯à®±à¯à®•à¯ கொடà¯à®™à¯à®•à®³à¯ மேதைகளே...
[p_no] => 7
[weburl] => tamilmagazine/msite.php?type=article&mid=1
)
. . .. .. . . . . . . . . . . . . . . . . . . . and so on . . . .
当我在浏览器中查看给定的 api (http://api.tamilmagazine.com/) 时,我得到了正确的字体。
{
"mag_id": "190987",
"mag_name": "தென்மேற்கு பருவமழை கேரளாவில் வரும் 5ம் துவங்கும் ",
"sid": "44",
"bpath": "http://www.tamilmagazine.com/",
"api_path": "http://api.tamilmagazine.com/",
"categories": [
{
"cat_id": "25",
"cat_name": "தென்மேற்கு பருவமழை கேரளாவில் வரும் 5ம் துவங்கும் ",
"articles": [
{
"aid": "3",
"a_title": "தென்மேற்கு பருவமழை கேரளாவில் வரும் 5ம் துவங்கும் ...",
"p_no": "7",
"weburl": "msitee.php?type=article&mid=1"
},
. .. . . . . and so on. . ...
换句话说,我的 api url 在浏览器中工作正常,而 php 解析后的 api url 在我的浏览器中对我不起作用,显示一些特殊字符(我不知道是 unicode 还是 ascii)。
请指教。
谢谢哈恩
这在服务器中可能是正确的 - 但在浏览器中查看它看起来是错误的。如果你没有指定输出的字符编码,或者 php.ini 中的设置是错误的,那么浏览器就会猜测,并且经常会出错。
几种测试方法:
-
通过查看源来检查"源"。(不过,请确保您可以在兼容的文本编辑器中查看源代码 - 否则可能会发生同样的情况)
-
在执行调试输出之前,请先添加正确的 HTML 标头以设置编码:
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>'; // Set the charset appropriately! Looks like a cyrillic set? print_r($json_output); echo '</body></html>';
-
接下来要检查的是你的PHP输出是否具有正确的标头.php.ini具有输出的默认设置:"default_charset"。如果这是空白的或错误的,请在 php 中将其设置为 apprpriate 值.ini或使用 ini_set();这将告诉 PHP 指定一个字符编码标头。
-
您也可以使用 header() 指定编码标头 - 但 php.ini 指令可能会冲突,因此请使用其中一个。
-
最后,如果失败,则需要手动解码。检查手册 (http://php.net/manual/en/function.json-decode.php) 中的注释 "contacto at hardcode dot dot 25-Nov-2010 01:53",因为这有一个示例函数
处理实际字符串时可以使用的其他技巧是使用
echo utf8_decode(print_r($json_output, true));
因为如果原始文件是 UTF-8,这可能会转换为浏览器更容易理解的 ISO。可能它不是utf-8,否则浏览器应该理解并适当地显示它,但如果所有其他方法都失败了,值得一试。
编辑的PHP代码。
<?php
header("Content-type: text/html; charset=utf-8");
$jsonurl = "http://api.tamilmagazine.com/";
$json = file_get_contents($jsonurl,0,null,null);
$json_output = json_decode($json);
print_r($json_output);
?>
成功了。我忘了提到内容类型。