Простая проблема кодировки символов html dom - PullRequest
4 голосов
/ 29 декабря 2010

Эй, ребята, я использую простой html dom для извлечения контента с другого веб-сайта, но дело в том, что существует проблема кодировки символов с материалом, полученным с использованием простого html dom. Персонажи появляются как маленький бриллиант с вопросительным знаком внутри.

Проблема кодировки символов возникает только с извлеченным содержимым, а весь другой текст на моем сайте отображается нормально.

Если бы кто-нибудь мог помочь, это было бы здорово.

Ответы [ 3 ]

6 голосов
/ 29 декабря 2010

Попробуйте использовать iconv, чтобы преобразовать кодировку выделенного текста в кодировку, которую вы используете на своей странице.

Подпись:

string iconv ( string $in_charset , string $out_charset , string $str )

Пример:

echo iconv("ISO-8859-1", "UTF-8", $text);
3 голосов
/ 20 июня 2012

У меня тоже была эта проблема, но это была не проблема кодировки. Это было сжатие 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));
}
2 голосов
/ 29 декабря 2010

Зайдите на сайт и проверьте их кодировку, просмотрев информацию о странице.

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