用阿拉伯字符解析HTML会产生奇怪的结果,如“ÃÔÓ”

时间:2013-10-22 12:30:38

标签: php xml html-parsing

我们正试图像这样解析HTML:

<li><a class="newsMarquee" href="http://www.lebanonfiles.com/news/617843">مستخدمو &quot;كهرباء لبنان&quot;: الاضراب مستمر حتى إقرار موازنة 2013 الخاصة بنا</a></li>
                                                            <li><a class="newsMarquee" href="http://www.lebanonfiles.com/news/617840">اجتماع برئاسة محافظ الجنوب بحث في اوضاع النازحين</a></li>

我们得到的结果是:

  

ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃμÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà   Ã£ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà ...ÞÃ'ÇÃ'ãÃ|ÃÃÃÃÃÃÉ2013ÇáÎÇÃÃÃÃÃÃÃLJ

我们使用过:header("Content-Type: text/html; charset=utf-8"); 有什么建议吗?

这是代码:

<?php

echo '<html><head>';
header("Content-Type: text/html; charset=utf-8");

echo '</head>';


echo '<body>';
$dom = new DOMDocument('1.0');
@$dom->loadHTMLFile($url);



$params = $dom->getElementsByTagName('div'); // Find Sections

$k=0;

foreach ($params as $param) //go to each Article 1 by 1

{


if($params->item($k)->getAttribute('class') == 'no-js')


{
    $params2 = $params->item($k)->getElementsByTagName('a');
    $i=0;

    while($params2->item($i)->getAttribute('class') == 'newsMarquee')
    {
        if($params2->item($i)->getAttribute('class') != 'newsMarquee')
            break; 
        else
        {
            echo '' .$params2->item($i)->nodeValue. '<br/>';
            //echo 'Link: '.$params2->item($i)->getAttribute('href').'<br/><br/>';
            $i++;

        }
    }
}
$k++;
}

echo '</body>';
echo '</html>';
?>

2 个答案:

答案 0 :(得分:1)

您的来源

http://www.lebanonfiles.com/news/617843

不使用UTF-8字符集;它使用的是Windows-1256(阿拉伯语)*。

尝试使用Windows-1256作为second argument to your DOMDocument call:

$dom = new DOMDocument('1.0', 'Windows-1256');

*供将来参考:我通过在浏览器中打开URL并转到&#34;编码&#34; menu - 这是浏览器使用的编码。您还可以查看&#34; Net&#34;浏览器的开发人员工具标签,查看页面返回的Content-type

答案 1 :(得分:1)

检查来源的编码,如Pekka所说。

该行

header("Content-Type: text/html; charset=utf-8");
读取xml文件时,

没有任何影响。 此行仅更新您网页的输出。