使用生成的PHP数组进行json_encode时出现空值问题

3
我已经查看了 PHP 的 simple 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_encodeReykjavík 转换为 null

您知道为什么或者有其他替代方法吗?

谢谢!

后来编辑:

在您的帮助下,我修改了此行:

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

...现在它可以运行了。

谢谢。


3
似乎与编码有关。它是 Reykjavík,而不是 Reykjavik。请注意特殊字符 í - Nick
1个回答

6

看起来json_encode期望UTF-8输入,但PHP的默认值是ISO-8859-1。

您应该能够执行以下操作:

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

这应该将拉丁字符编码为UTF-8,使其能够通过(编码)json_encode函数。

bugs.php.net上找到解决方案。


我收到了 Notice: Use of undefined constant UTF - assumed 'UTF' 的提示;我认为 PHP 将 UTF-8 视为减去 8 的 "UTF"。 - natinusala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接