使用Curl进行抓取远程内容时url中文编码问题示例探讨


Posted in PHP onOctober 29, 2013

PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。下面是详细解释:

string urlencode( string str)

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
例子 1 :urlencode函数与rawurlencode函数区别
$str='博 客'; 
echo urlencode($str); 
echo "<br>"; 
echo rawurlencode($str);

url结果:
%B2%A9+%BF%CD 
%B2%A9%20%BF%CD

例子 2 :url中文编码方法
从url:"http://www.baidu.com/s?wd=博 客" 转为 url:"http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2";
$url='http://www.baidu.com/s?wd=博 客'; 
$arr=explode('=',$url); 
$url=$arr[0].'='.rawurlencode($arr[1]); 
echo $url;

结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
或许用以下url编码函数
function cn_urlencode($url){ 
$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";//UTF-8中文正则 
if(preg_match_all($pregstr,$url,$matchArray)){//匹配中文,返回数组 
foreach($matchArray[0] as $key=>$val){ 
$url=str_replace($val, urlencode($val), $url);//将转译替换中文 
} 
if(strpos($url,' ')){//若存在空格 
$url=str_replace(' ','%20',$url); 
} 
} 
return $url; 
}

url结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
PHP 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 #PHP
单点登录 Ucenter示例分析
Oct 29 #PHP
php中过滤非法字符的具体实现
Oct 29 #PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 #PHP
PHP页面中文乱码分析
Oct 29 #PHP
php四种基础算法代码实例
Oct 29 #PHP
教你如何使用php session
Oct 28 #PHP
You might like
通过php删除xml文档内容的方法
2015/01/23 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
JS delegate与live浅析
2013/12/21 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
简单介绍Python中的RSS处理
2015/04/13 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
python matplotlib画图实例代码分享
2017/12/27 Python
python3实现windows下同名进程监控
2018/06/21 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
如何把python项目部署到linux服务器
2020/08/26 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
租车协议书范本2014
2014/11/17 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
施工安全保证书
2015/05/09 职场文书
公司员工手册范本
2015/05/14 职场文书
会议简报格式范文
2015/07/20 职场文书
家长会后的感想
2015/08/11 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
golang elasticsearch Client的使用详解
2021/05/05 Golang
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
python opencv通过按键采集图片源码
2021/05/20 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python