我使用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但不工作。任何想法?
答案 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);