file_get_contents模擬瀏覽器訪問的時候亂碼
阿新 • • 發佈:2019-02-17
<p>亂碼有幾種可能如下:</p><p>1.頁面能獲取過來,內容亂碼:可以採用iconv()和mb_convert_encoding()函式進行轉碼</p><p><pre name="code" class="php"><?php header("content-type:text/html;charset=utf-8"); $url= 'http://www.sohu.com'; //file_get_contents模擬瀏覽器訪問 ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)'); $html = file_get_contents($url); echo mb_convert_encoding($html,'utf8','gbk');
2.當內容都正常無法獲取,分兩種情況第一種是防盜鏈,第二種是頁面需要解壓
2.1防盜鏈情況下,模擬瀏覽器就可以了
header('content-type:text/html;charset=utf-8');
$url="http://www.sohu.com/"; <pre name="code" class="php"> //模擬瀏覽器訪問
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)'); $html=file_get_contents($url); //echo $html; echo mb_convert_encoding($html,'utf8','gbk');
2.2頁面解壓
header("content-type:text/html;charset=utf-8"); $url="http://wthrcdn.etouch.cn/WeatherApi?city=%E5%8C%97%E4%BA%AC"; $xml = simplexml_load_file("compress.zlib://".$url); $json=json_encode($xml); $arr=json_decode($json,true); print_r($arr);
在這用到了一個mb_convert_encoding函式,
PHP下編碼轉換函式mb_convert_encoding與iconv區別
1、mb_convert_encoding() 該函式會根據內容自動識別編碼,但是執行效率比iconv差;
2、然後有一種說法就是iconv()在一些字元轉換下會不正常,網上有種說法就是:發現iconv在轉換字元”—”到gb2312時會出錯,如果沒有ignore引數,所有該字元後面的字串都無法被儲存。不管怎麼樣,這個”—”都無法轉換成功,無法輸出。 另外mb_convert_encoding沒有這個bug.
3、mb_convert_encoding()是PHP擴充套件函式,要開啟擴充套件庫才能用;而iconv是PHP內建函式,不需另外開啟擴充套件庫就可以使用。
4、一般情況下用 iconv,只有當遇到無法確定原編碼是何種編碼,或者iconv轉化後無法正常顯示時才用mb_convert_encoding 函式.