file_get_contents模拟浏览器访问的时候乱码

  1. <p>乱码有几种可能如下:</p><p>1.页面能获取过来,内容乱码:可以采用iconv()和mb_convert_encoding()函数进行转码</p><p><pre name="code" class="php"><?php  
  2. header("content-type:text/html;charset=utf-8");  
  3. $url'http://www.sohu.com';  
  4. //file_get_contents模拟浏览器访问  
  5. ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)');  
  6. $html = file_get_contents($url);  
  7. echo mb_convert_encoding($html,'utf8','gbk');  


2.当内容都正常无法获取,分两种情况第一种是防盗链,第二种是页面需要解压

2.1防盗链情况下,模拟浏览器就可以了

[html] view plain copy
  1. header('content-type:text/html;charset=utf-8');    
  2.     $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页面解压
[html] view plain copy
  1. header("content-type:text/html;charset=utf-8");    
  2. $url="http://wthrcdn.etouch.cn/WeatherApi?city=%E5%8C%97%E4%BA%AC";    
  3. $xml = simplexml_load_file("compress.zlib://".$url);    
  4. $json=json_encode($xml);    
  5. $arr=json_decode($json,true);    
  6. 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 函数.


你可能感兴趣的:(file_get_contents模拟浏览器访问的时候乱码)