使用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 相关文章推荐
hessian 在PHP中的使用介绍
Dec 13 PHP
PHP $_FILES函数详解
Mar 09 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
PHP制作万年历
Jan 07 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
php原生数据库分页的代码实例
Feb 18 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
轮播的简单实现方法
2016/07/28 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python中的zip函数使用示例
2015/01/29 Python
详解Python的Lambda函数与排序
2016/10/25 Python
python类的继承实例详解
2017/03/30 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
校班主任推荐信范文
2013/12/03 职场文书
总裁办公室主任职责
2014/01/02 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
超强台风观后感
2015/06/09 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang