0

我有这样的代码

            <?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)。

请指教。

谢谢韩

4

2 回答 2

2

这在服务器中可能是正确的 - 但在浏览器中查看它看起来是错误的。如果不指定输出的字符编码,或者php.ini中的设置错误,那么浏览器就会猜测,并且经常会出错。

几种测试方法:

  1. 通过查看源来检查“源”。(但请确保您可以在兼容的文本编辑器中查看源代码 - 否则可能会发生同样的情况)

  2. 在进行调试输出之前,首先添加正确的 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>';
  1. 接下来要检查的是您的 PHP 输出是否具有正确的标头。php.ini 有一个输出的默认设置:“default_charset”。如果为空或错误,请在 php.ini 中或使用 ini_set() 将其设置为适当的值;这将告诉 php 指定一个字符编码标头。

  2. 您还可以使用 header() 指定编码标头 - 但 php.ini 指令可能会发生冲突,因此请使用其中一个。

  3. 最后,如果失败,您需要手动解码。通过“contacto at hardcode dot com dot 25-Nov-2010 01:53”检查手册(http://php.net/manual/en/function.json-decode.php)中的注释,因为它有一个示例函数


处理实际字符串时可以使用的其他技巧是使用

echo utf8_decode(print_r($json_output, true));

因为如果原始文件是 UTF-8 ,这可能会转换为浏览器更容易理解的 ISO 。可能它不是 utf-8,否则浏览器应该已经理解并适当地显示它,但如果一切都失败了,值得一试。

于 2012-06-02T06:01:02.440 回答
0

这是我编辑的 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);
        ?>

有效。我忘了提及内容类型。

于 2012-06-02T06:23:09.747 回答