Heim >Backend-Entwicklung >PHP-Tutorial > Curl 采摘乱码与采集不到 PHP

Curl 采摘乱码与采集不到 PHP

WBOY
WBOYOriginal
2016-06-13 12:51:14849Durchsuche

Curl 采集乱码与采集不到 PHP
PHP程序是用gbk2312编码的:

$url = "http://www.sina.com.cn";//gbk2312编码
//$url = "http://www.163.com";//gbk2312编码
//$url = "http://www.sohu.com";//gbk2312编码
 

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);//返回获取的输出的文本流
  $ret = curl_exec($ch);
  curl_setopt($ch, CURLOPT_TIMEOUT, 1);
  curl_close($ch);
   echo $ret;

?>

在采集sina.com.cn时,是正常的,但是采集163.com时是为空的,采集sohu.com时是丢码的.
这是怎么回事呢?如何解决?有哪位怎么呀?先谢谢了!!!没多少分了,不好意思。


------解决方案--------------------
别的不说,我就是来拿分的.楼主记得给全分

<br>
<br>
$curl=curl_init('http://www.163.com');<br>
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);<br>
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');<br>
$html=curl_exec($curl);<br>
var_dump($html);<br>
<br>
<br>
$curl=curl_init('http://www.sohu.com');<br>
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);<br>
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');<br>
$html=curl_exec($curl);<br>
//$html=strstr($html,'
$html=gzdecode($html);<br>
var_dump($html);<br>
<br>
<br>
function gzdecode($data) {   <br>
  $len = strlen($data);   <br>
  if ($len <font color="#FF8000">------解决方案--------------------</font><br> strcmp(substr($data,0,2),"\x1f\x8b")) {   <br>
   return null;  // Not GZIP format (See RFC 1952)   <br>
  }   <br>
  $method = ord(substr($data,2,1));  // Compression method   <br>
  $flags  = ord(substr($data,3,1));  // Flags   <br>
  if ($flags & 31 != $flags) {   <br>
   // Reserved bits are set -- NOT ALLOWED by RFC 1952   <br>
   return null;   <br>
  }   <br>
  // NOTE: $mtime may be negative (PHP integer limitations)   <br>
  $mtime = unpack("V", substr($data,4,4));   <br>
  $mtime = $mtime[1];   <br>
  $xfl  = substr($data,8,1);   <br>
  $os    = substr($data,8,1);   <br>
  $headerlen = 10;   <br>
  $extralen  = 0;   <br>
  $extra    = "";   <br>
  if ($flags & 4) {   <br>
   // 2-byte length prefixed EXTRA data in header   <br>
   if ($len - $headerlen - 2 
     return false;    // Invalid format   <br>
   }   <br>
   $extralen = unpack("v",substr($data,8,2));   <br>
   $extralen = $extralen[1];    <div class="clear">
                 
              
              
        
            </div>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn