php file_get_contents读取远程文件的乱码问题(gzip压缩引起的)
2016-01-11 18:24
686 查看
昨天发现以前做的调用 中国天气网的天气api,保存到本地发现有部分城市是乱码。
一直找不到原因。因为在浏览器看 完全正常。 如。读取 银川市的当天天气 http://m.weather.com.cn/data/101170101.html
在浏览器上看它的json数据 完全正常。编码也正常。但用file_get_contents 读取在浏览器输出就是乱码。
在网上忙活一阵才发现 原因 中国天气网开启了gzip压缩 。找到了解决方法 来自 http://www.php10086.com/2012/03/516.html
PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码,如何解决gzip问题方法有两种:
采用gzip编码格式
无论页面是否经过gzip压缩,上述代码都可以正常工作!
PHP 4.3.0以后版本支持,还可以用于fopen之类的函数~!
解决方法:
一直找不到原因。因为在浏览器看 完全正常。 如。读取 银川市的当天天气 http://m.weather.com.cn/data/101170101.html
在浏览器上看它的json数据 完全正常。编码也正常。但用file_get_contents 读取在浏览器输出就是乱码。
$url = 'http://m.weather.com.cn/data/101170101.html'; echo '<pre>'; print_r(file_get_contents($url));
在网上忙活一阵才发现 原因 中国天气网开启了gzip压缩 。找到了解决方法 来自 http://www.php10086.com/2012/03/516.html
PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码,如何解决gzip问题方法有两种:
curl解决:
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; }
采用gzip编码格式
file_get_contents解决:
file_get_contents("compress.zlib://".$url);
无论页面是否经过gzip压缩,上述代码都可以正常工作!
PHP 4.3.0以后版本支持,还可以用于fopen之类的函数~!
解决方法:
$url = 'http://m.weather.com.cn/data/101170101.html'; echo '<pre>'; print_r(file_get_contents("compress.zlib://".$url));//打开gzip压缩过的页面。 路径前不加compress.zlib:// 打开会有乱码。
相关文章推荐
- 团队作业php
- AJAX&PHP交互
- LAMP平台部署及应用(2)――部署phpMyAdmin系统
- Win10下使用PHP7+XDebug+Sublime Text 3搭建PHP集成开发环境
- PHP 视频
- PHP empty、isset、isnull的区别
- tp3.1(3)
- JetBrains系列新版本注册激活包括IDEA15,PHPSTORM10,WEBSTORM11
- 日文“表” php 会报错
- PHP 之 Laravel 框架安装及相关开源软件
- PHP 之 Laravel 框架安装及相关开源软件
- PHP指定字段的多维数组排序方法
- phpStudy 2016 更新下载,新版支持php7.0
- 如何判断PHP 是ts还是nts版的
- PHP 连接SQL2008实践
- zabbix2.2.2-hostgroups.php代码分析(1)
- 数据持久化方案(三)ContentProvider
- js用ajax和jison在不同页面的php和html之间互相传值的方法
- php二分查找算法
- PHP usleep() 函数