简单的html dom字符编码问题

3
我正在使用简单的HTML DOM从另一个网站检索内容,但问题是使用简单的HTML DOM检索到的内容存在字符编码问题。这些字符显示为带有问号的小菱形。
字符编码问题仅发生在检索到的内容上,我网站上的所有其他文本都正常显示。
如果有人能够帮助,那就太好了。
3个回答

7
尝试使用iconv将抓取的文本字符集转换为您页面使用的字符集。
签名:
string iconv ( string $in_charset , string $out_charset , string $str )

例子:

echo iconv("ISO-8859-1", "UTF-8", $text);

你在第一个参数中写了 ISO-8859-1。我怎么知道我需要什么呢?因为我尝试了你写的,但它没有起作用。如果你能帮助我,我会很高兴的。谢谢。 - php123

4

我也遇到过这个问题,但它不是字符集的问题。这是gzip压缩,简单的HTML DOM无法处理。以下是我的解决方案:使用函数file_get_html2代替file_get_html

function curl($url){
    $headers[]  = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
    $headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    $headers[]  = "Accept-Language:en-us,en;q=0.5";
    $headers[]  = "Accept-Encoding:gzip,deflate";
    $headers[]  = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $headers[]  = "Keep-Alive:115";
    $headers[]  = "Connection:keep-alive";
    $headers[]  = "Cache-Control:max-age=0";

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_ENCODING, "gzip");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($curl);
    curl_close($curl);
    return $data;

}
function file_get_html2($url){
    return str_get_html(curl($url));
}

3

访问网站并查看页面信息以确定字符集。

$text = iconv(mb_detect_encoding($text), "UTF-8//TRANSLIT//IGNORE", $text);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接