带有生成的PHP数组的json_encode中的空值

时间:2012-09-03 12:33:28

标签: php arrays parsing null json

我一直在寻找PHP的简单的html dom ,它的效果非常好。问题是当我尝试将返回的值添加到PHP数组时。

我有一个例子,您可以看到结果http://fae.ctrl.fo/plane_script/,下面的脚本是从该链接提供数据的。

<?PHP

include('simple_html_dom.php');

$resultSet = array();
$html = file_get_html('http://212.55.50.147');
foreach($html->find('tr[class^=FlightScheduleItem]') as $tr)
    {
        $row = array();
        foreach($tr->find('td') as $td) 
        {
            echo $td->innertext." ";
            $row[] = $td->innertext; 
        }
        $resultSet[] = $row;
    }

    echo "<br/><br/><br/>";

echo $_GET['callback'] . '(' .json_encode($resultSet) . ')';
?>

正如您所看到的,我正在打印 td 标记中找到的所有值,并且我将它们保存在同一循环中的数组中。如果您检查输出,您会看到在阵列中找不到“Reykjavík”。

你知道为什么吗?

稍后修改:

如果我使用PHP的print_r函数,我可以在我的数组中找到这个单词。这意味着 json_encode Reykjavík转换为null

你知道为什么或另类吗?

由于

稍后修改:

感谢您的帮助,我修改了这一行:

$row[] = htmlentities($td->innertext, UTF-8); 

......现在它有效。

谢谢。

1 个答案:

答案 0 :(得分:6)

似乎json_encode期望输入UTF-8,但PHP上的默认值是ISO-8859-1。

你应该可以这样做:

$resultSet[] = htmlentities($row, UTF-8)

这应该将拉丁字符编码为UTF-8,允许它在json_encode函数中传递(编码)。

bugs.php.net

上的解决方案