使用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 相关文章推荐
PHP5.0对象模型探索之抽象方法和抽象类
Sep 05 PHP
PHP form 表单传参明细研究
Jul 17 PHP
simplehtmldom Doc api帮助文档
Mar 26 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
深入PHP autoload机制的详解
Jun 09 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
thinkphp 获取控制器及控制器方法
Apr 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 ci框架验证码实例分析
2013/06/26 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
微信支付的开发流程详解
2016/09/13 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
jQuery实现动态删除LI的方法
2017/05/30 jQuery
JavaScript订单操作小程序完整版
2017/06/23 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
python迭代dict的key和value的方法
2018/07/06 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
python批量修改交换机密码的示例
2020/09/22 Python
python调用百度API实现人脸识别
2020/11/17 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
优秀小学生家长评语
2014/01/30 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL