后端开发|php教程
headerlen,data,quot,Curl,substr
后端开发-php教程
Curl 采集乱码与采集不到 PHP
PHP程序是用gbk2312编码的:
词林源码,vscode网站怎么部署,ubuntu无法截图,提高tomcat内存,sqlite不会创建文件,jquery 下一步插件,前端架构师是写框架吗,红色雷姆爬虫的由来,php数组去除重复的值,浦城正规seo报价,网站美女解说员源码,网页自适应不同浏览设备源码,超酷博客模板lzw
<?php
$url = “”;//gbk2312编码
//$url = “”;//gbk2312编码
//$url = “”;//gbk2312编码
tpshop商城源码,vscode 前端项目,ubuntu字符动画,未知tomcat版本,sqlite远程服务,网站服务器 试用,活动插件,小程序开发前端框架,爬虫资料分享,零基础学php培训,seo 方案,源码之家新闻网站,网页html5播放器,微医疗模板,js 页面滚动距离,小程序内容管理系统源码,.net程序设计代码lzw
$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;
登录注册网站源码,vscode蛇形转驼峰,ubuntu 系统恢复,联想tomcat配置参数,sqlite数据库怎么更改,基于爬虫的旅游网站开发,php无限分类排序,鹤壁网络推广seo优化,sns社区网站,加载页面html模板lzw
?>
在采集时,是正常的,但是采集时是为空的,采集时是丢码的.
这是怎么回事呢?如何解决?有哪位怎么呀?先谢谢了!!!没多少分了,不好意思。
——解决方案——————–
别的不说,我就是来拿分的.楼主记得给全分
PHP code
$curl=curl_init(\);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);curl_setopt($curl,CURLOPT_USERAGENT,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322));$html=curl_exec($curl);var_dump($html);$curl=curl_init(\);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);curl_setopt($curl,CURLOPT_USERAGENT,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322));$html=curl_exec($curl);//$html=strstr($html,<);$html=gzdecode($html);var_dump($html);function gzdecode($data) {$len = strlen($data);if ($len < 18 || strcmp(substr($data,0,2),"\x1f\x8b")) {return null; // Not GZIP format (See RFC 1952)}$method = ord(substr($data,2,1)); // Compression method$flags = ord(substr($data,3,1)); // Flagsif ($flags & 31 != $flags) {// Reserved bits are set -- NOT ALLOWED by RFC 1952return null;}// NOTE: $mtime may be negative (PHP integer limitations)$mtime = unpack("V", substr($data,4,4));$mtime = $mtime[1];$xfl = substr($data,8,1);$os = substr($data,8,1);$headerlen = 10;$extralen = 0;$extra = "";if ($flags & 4) {// 2-byte length prefixed EXTRA data in headerif ($len - $headerlen - 2 < 8) { return false; // Invalid format}$extralen = unpack("v",substr($data,8,2));$extralen = $extralen[1];if ($len - $headerlen - 2 - $extralen < 8) { return false; // Invalid format}$extra = substr($data,10,$extralen);$headerlen += 2 + $extralen;} $filenamelen = 0;$filename = "";if ($flags & 8) {// C-style string file NAME data in headerif ($len - $headerlen - 1 < 8) { return false; // Invalid format}$filenamelen = strpos(substr($data,8+$extralen),chr(0));if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) { return false; // Invalid format}$filename = substr($data,$headerlen,$filenamelen);$headerlen += $filenamelen + 1;} $commentlen = 0;$comment = "";if ($flags & 16) {// C-style string COMMENT data in headerif ($len - $headerlen - 1 < 8) { return false; // Invalid format}$commentlen = strpos(substr($data,8+$extralen+$filenamelen),chr(0));if ($commentlen === false || $len - $headerlen - $commentlen - 1 < 8) { return false; // Invalid header format}$comment = substr($data,$headerlen,$commentlen);$headerlen += $commentlen + 1;} $headercrc = "";if ($flags & 1) {// 2-bytes (lowest order) of CRC32 on header presentif ($len - $headerlen - 2 < 8) { return false; // Invalid format}$calccrc = crc32(substr($data,0,$headerlen)) & 0xffff;$headercrc = unpack("v", substr($data,$headerlen,2));$headercrc = $headercrc[1];if ($headercrc != $calccrc) { return false; // Bad header CRC}$headerlen += 2;} // GZIP FOOTER - These be negative due to PHPs limitations$datacrc = unpack("V",substr($data,-8,4));$datacrc = $datacrc[1];$isize = unpack("V",substr($data,-4));$isize = $isize[1]; // Perform the decompression:$bodylen = $len-$headerlen-8;if ($bodylen 0) {switch ($method) { case 8:// Currently the only supported compression method:$data = gzinflate($body);break; default:// Unknown compression methodreturn false;}} else {// Im not sure if zero-byte body content is allowed.// Allow it for now... Do nothing...} // Verifiy decompressed size and CRC32:// NOTE: This may fail with large data sizes depending on how//PHPs integer limitations affect strlen() since $isize//may be negative for large sizes.if ($isize != strlen($data) || crc32($data) != $datacrc) {// Bad format! Length or CRC doesn match!return false;}return $data; }
如果觉得《Curl 采集乱码与采集不到 PHP 该怎么处理》对你有帮助,请点赞、收藏,并留下你的观点哦!