使用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教程 插件机制在PHP中实现方案
Nov 02 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 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开启安全模式后禁用的函数集合
2011/06/26 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php 的反射详解及示例代码
2016/08/25 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
git进行版本控制心得详谈
2017/12/10 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python爬虫 正则表达式解析
2019/09/28 Python
python元组的概念知识点
2019/11/19 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
应届毕业生简历自我评价
2014/01/31 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
详解Go与PHP的语法对比
2021/05/29 PHP