俄语的php问题

时间:2010-10-06 12:31:31

标签: php curl encoding domdocument iconv

我使用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-&gt; item(2) - &gt; nodeValue; 显示错误文本,而不是俄语。我尝试iconv但不工作。任何想法?

3 个答案:

答案 0 :(得分:11)

我建议在加载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->preserveWhiteSpace = false;
    ..........
    echo html_entity_decode($cols->item(2)->nodeValue,ENT_QUOTES,"UTF-8");
    .......... 

答案 1 :(得分:1)

DOM无法识别HTML的编码。 您可以尝试以下方式:

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

// taken from http://php.net/manual/en/domdocument.loadhtml.php#95251

答案 2 :(得分:0)

mb_convert_encoding($ html,&#39; HTML-ENTITIES&#39;,&#34; UTF-8&#34;);

对于PHPQuery也是如此。

P.S。我使用phpQuery :: newDocument($ html);

而不是$ dom-&gt; loadHTML($ html);