【问题标题】:php problem with russian language俄语的php问题
【发布时间】:2010-10-06 12:31:30
【问题描述】:

我使用 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 但不起作用。有什么想法吗?

【问题讨论】:

  • 我不明白你的问题是什么。你得到什么错误文本? “不工作”是什么意思?
  • 而不是俄语,我得到 Ð ÑоÑо?

标签: php curl encoding domdocument iconv


【解决方案1】:

我建议在加载 UTF-8 页面之前使用mb_convert_encoding

$dom = 新的 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"); …………

【讨论】:

  • loadHTML 据我了解仅支持 ISO-88591。这就是为什么您必须将所有 utf-8 字符编码为它们的实体(实际上是 utf-16 实体)。如果您想避免转换,您可以使用支持 utf-8 的 loadXML,但是 loadXML 对损坏的元素非常严格,而且您必须对非关闭元素(如
    )进行大量字符串修复
【解决方案2】:

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

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

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

【讨论】:

  • 它就是这么做的。 HTML 基本上是具有给定定义的 XML 文档。您总是可以尝试一下,看看它是否有效。
【解决方案3】:

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

同样的事情也适用于 PHPQuery。

附:我使用 phpQuery::newDocument($html);

而不是 $dom->loadHTML($html);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多