当前位置:  编程技术>php
本页文章导读:
    ▪php file_get_contents抓取Gzip网页乱码的解决方法      本节内容: file_get_contents抓取Gzip网页乱码 在php编程中,使用 file_get_contents() 函数抓取网页会发生乱码。 导致乱码的可能原因如下: 一个是编码问题,一个是目标页面开了Gzip。 以下为大家.........
    ▪php导出word文件的简单例子      本节内容: php 导出word的函数。 例子:   代码示例: <?php /** * 导出word文件 * by www. */ function docsave($path,$data){         $data = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:.........
    ▪php导出word格式数据的实现代码      本节内容: 一个php 导出word文档的类 例子:   代码示例: <?php /** * 生成word文档的类 * by www. */ class word {     function start()     {         ob_start();         echo '<html xmlns:o=.........

[1]php file_get_contents抓取Gzip网页乱码的解决方法
    来源: 互联网  发布时间: 2013-12-24

本节内容:
file_get_contents抓取Gzip网页乱码

在php编程中,使用 file_get_contents() 函数抓取网页会发生乱码。

导致乱码的可能原因如下:
一个是编码问题,一个是目标页面开了Gzip。

以下为大家介绍下在开启Gzip功能时,防止产生乱码的方法。

把抓取到的内容转下编码即可($content=iconv("GBK", "UTF-8//IGNORE", $content);),

讨论下如何抓取开了Gzip的页面。

获取的头部当中有Content-Encoding: gzip说明内容是GZIP压缩的。
用FireBug看一下即可看出页面是否开启gzip压缩。

用firebug查看我的博客的头信息,Gzip是开了的。
请求头信息原始头信息
 

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie __utma=225240837.787252530.1317310581.1335406161.1335411401.1537; __utmz=225240837.1326850415.887.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=%E4%BB%BB%E4%BD%95%E9%A1%B9%E7%9B%AE%E9%83%BD%E4%B8%8D%E4%BC%9A%E9%82%A3%E4%B9%88%E7%AE%80%E5%8D%95%20site%3Awww.nowamagic.net; PHPSESSID=888mj4425p8s0m7s0frre3ovc7; __utmc=225240837; __utmb=225240837.1.10.1335411401
Host www.
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0

下面提供一些解决方法,供大家参考。

1,使用自带的zlib库
如果服务器已经装了zlib库,可用以下方法解决乱码问题。
 

代码示例:
<?php
$data = file_get_contents("compress.zlib://".$url);

2,使用CURL代替file_get_contents
 

代码示例:
<?php
function curl_get($url, $gzip=false){
 $curl = curl_init($url);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
 if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
 $content = curl_exec($curl);
 curl_close($curl);
 return $content;
}

3,使用gzip解压函数
 

代码示例:
<?php
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));  // Flags
  if ($flags & 31 != $flags) {
    // Reserved bits are set -- NOT ALLOWED by RFC 1952
    return 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 header
    if ($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 header
    if ($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 header
    if ($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 present
    if ($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 PHP's 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 < 1) {
    // This should never happen - IMPLEMENTATION BUG!
    return null;
  }
  $body = substr($data,$headerlen,$bodylen);
  $data = "";
  if ($bodylen > 0) {
    switch ($method) {
      case 8:
        // Currently the only supported compression method:
        $data = gzinflate($body);
        break;
      default:
        // Unknown compression method
        return false;
    }
  } else {
    // I'm 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
  //       PHP's 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't match!
    return false;
  }
  return $data;
}

调用示例:
 

代码示例:
$html=file_get_contents('http://www./');
$html=gzdecode($html);

希望以上介绍的三个方法,可以帮助大家解决大部分gzip引起的抓取乱码的问题。
,祝大家学习进步。


    
[2]php导出word文件的简单例子
    来源: 互联网  发布时间: 2013-12-24

本节内容:
php 导出word的函数。

例子:
 

代码示例:

<?php
/**
* 导出word文件
* by www.
*/
function docsave($path,$data){
        $data = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">'.$data.'</html>';
        $fp=fopen($path,"wb");
        fwrite($fp,$data);
        fclose($fp);
        die('success');
}

$data='<p></p>
        <p></p>
        <p></p>';

$data = mb_convert_encoding($data, "gb2312", "UTF-8"); //将UTF8字符集 转化为 GB2312的
docsave("./data.doc",$data);
//header("Content-Type: application/msword");
?>

您可能感兴趣的文章:
php导出word格式数据的实现代码
php 导出word文档的简单示例
php导出Word后页面视图和样式问题的解决方法
php导出word格式文档的实例代码
php生成excel或word文档的最简单方法
php生成word文档(读取数据库)
php生成word最简单的例子
php使用phpword生成word文档的例子
php生成word文件的简单范例
php 生成 导出word(可包含图片)的代码
php生成word的例子
将网页导出为Word文档的php代码介绍
php使用phpword生成word文档


    
[3]php导出word格式数据的实现代码
    来源: 互联网  发布时间: 2013-12-24

本节内容:
一个php 导出word文档的类

例子:
 

代码示例:
<?php
/**
* 生成word文档的类
* by www.
*/
class word
{
    function start()
    {
        ob_start();
        echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
        xmlns:w="urn:schemas-microsoft-com:office:word"
        xmlns="http://www.w3.org/TR/REC-html40">';
        }
    function save($path)
    {    
        echo "</html>";
        $data = ob_get_contents();
        ob_end_clean();
        
        $this->wirtefile ($path,$data);
    }
 
    function wirtefile ($fn,$data)
    {
        $fp=fopen($fn,"wb");
        fwrite($fp,$data);
        fclose($fp);
    }
}
 
//导出的程序文件
//导出 ---start---
require SITE_ROOT.'include/word.class.php';  //类文件放在根目录下的include文件夹下
$word = new word();
//查询数据填入word 中
$result = $db->query("SELECT * FROM ".DB_PRE."box where status='9' order by boxid DESC");
while($r = $db->fetch_array($result))
{
  $r['orderinfo'] = $db->get_one("SELECT * FROM ".DB_PRE."order where orderid='".$r['orderid']."'");
  $r['wrapinfo']  = $db->get_one("SELECT * FROM ".DB_PRE."wrap where orderid='".$r['orderid']."'");
 $boxlist[] = $r;
}
           
 foreach($boxlist as $key=>$val){
    $order->UPCAbarcode($val['box_code']);
   
    $html .='<table width=800 cellpadding="6" align="center" cellspacing="5" bgcolor="#000000">
    <tr bgcolor="White" height="50">
      <td width=80 >iGo运<br/>单号</td>
      <td width=300 ><img src='/blog_article/.$val['iGocode_code'].' /><br/>&nbsp;&nbsp;'.$val['box_code'].'</td>
      <td width=60 >日期</td>
      <td width=100 >'.date('Y-m-d',$val[create_date]).'</td>
      <td width=100 >标示<br/>姓名</td>
      <td width=240 >'.$val[code].'/'.$val['orderid'].'<br/>'.$val['orderinfo']['user_name'].'</td>
    </tr>
    <tr bgcolor="White">
      <td width=60 >件数</td>
      <td width=40 >3</td>
      <td width=40 >重量</td>
      <td width=150 >56.5</td>
      <td width=40 >品名</td>
      <td width=390 >咬咬了,吸盘碗,学饮杯,鱼干油</td>
    </tr>
    <tr bgcolor="White">
      <td width=110 >服务<br/>类别</td>
      <td width=200 >库房服务</td>
      <td width=110 >服务<br/>要求</td>
      <td width=280 >合小箱</td>
    </tr>
    <tr bgcolor="White">
      <td width=120 ><br/><br/>客户<br/>备注<br/><br/></td>
      <td width=580 >'.$val['orderinfo']['beizhu'].'</td>    
    </tr>
    <tr bgcolor="White">
      <td width=120 ><br/><br/><br/>到货<br/>情况<br/><br/><br/><br/></td>
      <td width=580 >什么问题?果点不到<br/>什么问题?果点不到<br/>什么问题?果点不到<br/><br/><br/><br/><br/><br/><br/><br/></td>
    </tr>
    </table> <br/><br/><br/><br/>
'; 
 }
     $word->start();
     $filename = '拣货单导出.doc';
     echo $html;
      $word->save($filename);
    
      //文件的类型
      header('Content-type: application/word');
      header('Content-Disposition: attachment; filename="拣货单导出.doc"');
      readfile($filename);
      ob_flush();
      flush();
     exit();
//导出word --end--

您可能感兴趣的文章:
php导出word文件的简单例子
php 导出word文档的简单示例
php导出Word后页面视图和样式问题的解决方法
php导出word格式文档的实例代码
php生成excel或word文档的最简单方法
php生成word文档(读取数据库)
php生成word最简单的例子
php使用phpword生成word文档的例子
php生成word文件的简单范例
php 生成 导出word(可包含图片)的代码
php生成word的例子
将网页导出为Word文档的php代码介绍
php使用phpword生成word文档


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

网络技术 iis7站长之家