3

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); 

...そして今、それは動作します。

ありがとうございました。

4

1 に答える 1

6

UTF-8 入力を想定しているようjson_encodeですが、PHP のデフォルトは ISO-8859-1 です。

これを行うことができるはずです:

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

これにより、ラテン文字が UTF-8 としてエンコードされ、関数内でパススルー (エンコード) できるようになりjson_encodeます。

bugs.php.netで見つけた解決策

于 2012-09-03T12:48:19.847 に答える