4

curlを使用してロシア語でutf-8のページを取得します。テキストをエコーすると、うまく表示されます。それから私はそのようなコードを使用します

$dom = new domDocument; 

        /*** load the html into the object ***/ 
        @$dom->loadHTML($html); 

        /*** discard white space ***/ 
        $dom->preserveWhiteSpace = false; 

        /*** the table by its tag name ***/ 
        $tables = $dom->getElementsByTagName('table'); 

        /*** get all rows from the table ***/ 
        $rows = $tables->item(0)->getElementsByTagName('tr'); 

        /*** loop over the table rows ***/ 
        for ($i = 0; $i <= 5; $i++)
        { 
            /*** get each column by tag name ***/ 
            $cols = $rows->item($i)->getElementsByTagName('td'); 

            echo $cols->item(2)->nodeValue; 

            echo '<hr />'; 
        } 

$htmlにはロシア語のテキストが含まれています。その後、echo $ cols-> item(2)-> nodeValue; ロシア語ではなく、エラーテキストを表示します。iconvを試しましたが、機能しません。何か案は?

4

3 に答える 3

13

UTF-8ページをロードする前にmb_convert_encodingを使用することをお勧めします。

    $ dom = new DomDocument();   
    $ html = mb_convert_encoding($ html、'HTML-ENTITIES'、 "UTF-8");
    @ $ dom-> loadHTML($ html);

または、これを試すことができます

    $ dom = new DomDocument( '1.0'、'UTF-8');
    @ $ dom-> loadHTML($ html);
    $ dom-> prepareWhiteSpace = false;
    .........。
    echo html_entity_decode($ cols-> item(2)-> nodeValue、ENT_QUOTES、 "UTF-8");
    .........。
于 2010-10-06T13:01:27.507 に答える
1

DOMはHTMLのエンコーディングを認識できません。次のようなことを試すことができます:

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);

// taken from http://php.net/manual/en/domdocument.loadhtml.php#95251
于 2010-10-06T12:38:44.190 に答える
0

mb_convert_encoding($ html、'HTML-ENTITIES'、 "UTF-8");

同じことがPHPQueryでも機能しました。

PS私はphpQuery::newDocument($ html);を使用します。

$ dom-> loadHTML($ html);の代わりに

于 2014-04-09T10:47:17.400 に答える