来自json_encode的JSON对象中的HTML为NULL

时间:2013-12-25 11:30:08

标签: php utf-8 json

我有一个调用php文件的ajax调用,该文件运行一个长PHP函数,该函数返回一个JSON编码的数组/对象。现在我需要将HTML也发送到ajax响应中。我想过在数组中发送HTML。

这是一个好习惯吗?

现在我无法正常工作,我获得NULL作为该属性的值。不知道为什么。

$statHTML = '<table>';
foreach ($toHTML as $key=>$value) {
    $statHTML.= '
        <tr class="'.$key.'">
            <td class="side">'.$value[0].'</td>
            <td>'.$value[2].' '.$value[1].'</td>
        </tr>';
}
$statHTML.= '</table>';
//  echo $statHTML;   // - this works
//function return   
$answer = array('mostSearched'=>$mostSearched,
                'timeOfDay' => $timeOfDay,
                'mostSearchedDays'=>$mostSearchedDays,
                'statHTML' => $statHTML                 
            );
return json_encode($answer);

JSON.parse()之前来自控制台的ajax响应:

{
    "mostSearched": {
        "title": "Most serached houses",
        "colNames": [21],
        "rowNames": [2013],
        "rows": [1]
    },
    "timeOfDay": {
        "title": "Time of search",
        "colNames": ["07:30"],
        "rowNames": ["07:30"],
        "rows": [
            [1]
        ]
    },
    "mostSearchedDays": {
        "title": "Most searched days",
        "colNames": ["2013-12-21", "2013-12-22", "2013-12-23", "2013-12-24", "2013-12-25", "2013-12-26", "2013-12-27"],
        "rowNames": ["2013-12-21", "2013-12-22", "2013-12-23", "2013-12-24", "2013-12-25", "2013-12-26", "2013-12-27"],
        "rows": [
            [1, 1, 1, 1, 1, 1, 1]
        ]
    },
    "statHTML": null
}

3 个答案:

答案 0 :(得分:8)

来自php.net

  

<强>参数

     

<强>值

     

正在编码的值。可以是除资源之外的任何类型。

     

所有字符串数据必须采用UTF-8编码。

所以使用:

$answer = array('mostSearched'=>$mostSearched,
        'timeOfDay' => $timeOfDay,
        'mostSearchedDays'=>$mostSearchedDays,
        'statHTML' => utf8_encode($statHTML)
);

return json_encode($answer);

答案 1 :(得分:1)

PHP使用的内置JSON解析器很可能无法正确解析HTML,解决问题的最简单方法是在服务器上对html进行base64编码,然后使用较新的{在客户端上对其进行解码{1}}和atob base64方法,或其中的众多polyfill之一。

答案 2 :(得分:0)

在转换时使用base64_enccode

$answer = array('statHTML'=>base64_encode('<h1>html in here</h1>'));
echo json_encode($answer);exit;

在收到ajax的回复时

atob(response.statHTML);

希望你了解它是如何运作的