php curl函数采集网页出现乱码问题解决方法
gzip压缩传输导致乱码
今天在采集京东的时候发现返回的数据是乱码,网上说可能和压缩有关,看了一下京东的头信息的确进行gzip加密,好吧,那就解压吧
代码如下 | 复制代码 |
$return = gzdecode($return); //将return的字符进行解码 另一种解决办法 curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); |
页面编码问题
代码如下 | 复制代码 |
mb_convert_encoding($str, 'utf-8', 'GBK,UTF-8,ASCII');就行了 |
1.找到未定义变量进行处理
代码如下 | 复制代码 |
addslashes(htmlspecialchars(isset($_POST[$str])?$_POST[$str]:'')); |
2.把错误给过滤掉
代码如下 | 复制代码 |
@$page=$_GET["page"]; |
3.修改php.ini配置文件进行所有错误过滤
代码如下 | 复制代码 |
error_reporting = E_ALL & ~E_NOTICE 或者 ini_set( ‘display_errors’, ’0′ ); |
4.在程序中直接加一个处理
代码如下 | 复制代码 |
if (!$cfg['debug']) { |
5.在php文件最开始处加如下一句代码
代码如下 | 复制代码 |
error_reporting(0); |
总结:
上面所有方法中最好的方法是方法一,这样在对程序性能上是有很好的帮助,如果你页面错误过多直接过滤掉会影响性能的哦,我以前介绍过一篇这样的文章大家可在本地搜索。
在使用php curl获取网页内容有些网站提示405 method not allowed状态码了,这个问题我分析了出问题的网站是因为ipv6而导致了,所以我们只要简单的调整一下就可以解决这个问题了,下面一起来看看吧。1.php curl ipv4使用例子
代码如下 | 复制代码 |
/** |
上面代码在ipv4是没有任何问题了,如果在了ipv6网站就会返回405 method not allowed状态码了,那么我们查看了php手册发现只要简单的修改一下即可。
以上为我编写的一个基本curl访问的方法,因为我这里需要通过使用IPv6的方式,所以加了相应的选项,相信大家能看的明白,平时经常用到的选项上面都有出现,大家根据需要摘取。
405/Method Not Allowed,表示不支持请求的方法,这个错误不常见。
导致403错误是要是由于curl默认是用post方式进行提交访问的,post方式在此域名下是没有权限的,如我在测试www.111cn.net的时候就出现了此问题,在我修改为get的方式,并且增加了header头后,即可正常访问,个人推测,或许是亚马逊那边基本上都是采用get的方式,才会被认为是人为的点击,对post做了相应屏蔽。
ipv6增加了如下代码:
代码如下 | 复制代码 |
//设置Header头 |
命令行的形式为:
curl -v www.111cn.net
IPV6下curl超时问题
代码如下 | 复制代码 |
<?php $ch = curl_init(); |
注:curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4) 只有在php版本5.3及以上版本,curl版本7.10.8及以上版本时,以上设置才生效。
phpmyadmin界面乱码
效果如我们的中文表都是乱码了(注意:我使用的是国外的linux空间了,使用国内的没问题)
出现这个问题我们一可以不使用国外主机现成的phpmyadmin了,我们自己下载一个phpmyadmin上传上去,这样一般可以解决问题,如果不行我们参考下面办法
phpmyadmin乱码解决
1. 因为MySQL的默认编码是latin1,所以首先我们需要修改一下PHPMyAdmin的编码转换。修改libraries目录下面的select_lang.lib.php文件,将
代码如下 | 复制代码 |
[indent] 'utf-8' => 'utf8', 修改成 'utf-8' => 'latin1', [/indent] |
2. 接下来还要修改一下页面的编码显示,将
代码如下 | 复制代码 |
[indent] 'zh-gb2312' => array('zh|chinese simplified', 'chinese_simplified-gb2312', 'zh'), 修改成 'zh-gb2312-utf-8' => array('zh|chinese simplified', 'chinese_simplified-gb2312', 'zh'), [/indent] |
也就是在zh-gb2312后面增加-utf-8,这样页面编码就支持UTF-8了。
3. 首先选择zh-gb2312-utf-8进入PHPMyAdmin,这个时候浏览GB2312编码的数据正常,但是浏览UTF-8的数据是乱码。如果浏览UTF-8的数据的话,进入首页,然后在Language里面选择zh-utf-8就可以了
php页面中文乱码
如果是程序页面错误我们可参考一面方法
数据库中,所有表和有中文的字段指定使用编码:utf8_unicode_ci,注意表和字段都需要指定!
:数据库连接的时候指定编码:
代码如下 | 复制代码 |
mysqli_query($db_conn, "SET NAMES utf8");//指定脚本到数据库的编码 mysqli_query($db_conn, "set character_set_client=utf8"); //指定mysql内部的数据到磁盘编码 mysqli_query($db_conn, "set character_set_connection=utf8");//指定mysql的连接层编码 mysqli_query($db_conn, "set character_set_results=utf8");//指定mysql查询磁盘到数据结果的编码 |
这样页面问题也就解决了
下面是一个朋友在使用yii时碰到PHP warning Illegal offset type错误问题的解决办法,有需要的朋友参考一下。一句话,错在用对象作为数组的键。比如说,以下代码就会引发这个warning:
代码如下 | 复制代码 |
$arr = array(); class a { } $o = new a; echo $arr[$o]; |
具体说来,我是在做Yii多语言站点的时候触发这个warning的,我写了一句:
代码如下 | 复制代码 |
Yii::app()->language = Yii::app()->request->cookies['lang']; |
在下面一句报错:
代码如下 | 复制代码 |
$this->_files[$category][$language]=$this->basePath.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$category.'.php'; 124 } Yii::app()->language = Yii::app()->request->cookies['lang']->value; |
代码如下
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
总结android studio注意事项及打不开等问题解决方法
经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20- PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31