我一直在寻找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);
......现在它有效。
谢谢。
答案 0 :(得分:6)
似乎json_encode
期望输入UTF-8,但PHP上的默认值是ISO-8859-1。
你应该可以这样做:
$resultSet[] = htmlentities($row, UTF-8)
这应该将拉丁字符编码为UTF-8,允许它在json_encode
函数中传递(编码)。