別の Web サイトからコンテンツを取得するために単純な html dom を使用していますが、単純な html dom を使用して取得したものには文字エンコーディングの問題があります。文字は、内側に疑問符が付いた小さなひし形として表示されます。
文字エンコーディングの問題は取得したコンテンツでのみ発生し、サイトの他のすべてのテキストは正常に表示されます。
誰かがそれを助けることができれば、それは素晴らしいことです.
別の Web サイトからコンテンツを取得するために単純な html dom を使用していますが、単純な html dom を使用して取得したものには文字エンコーディングの問題があります。文字は、内側に疑問符が付いた小さなひし形として表示されます。
文字エンコーディングの問題は取得したコンテンツでのみ発生し、サイトの他のすべてのテキストは正常に表示されます。
誰かがそれを助けることができれば、それは素晴らしいことです.
iconv
を使用して、スクレイピングされたテキストの文字セットをページで使用する文字セットに変換してみてください。
サイン:
string iconv ( string $in_charset , string $out_charset , string $str )
例:
echo iconv("ISO-8859-1", "UTF-8", $text);
私もこの問題を抱えていましたが、文字セットの問題ではありませんでした.単純なhtml domが処理できないのはgzip圧縮でした. これが私の解決策です。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));
}
Web サイトにアクセスし、ページ情報を表示して文字セットを確認します。
$text = iconv(mb_detect_encoding($text), "UTF-8//TRANSLIT//IGNORE", $text);