1. 程式人生 > >file_get_contents模擬瀏覽器訪問的時候亂碼

file_get_contents模擬瀏覽器訪問的時候亂碼

<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 函式.