使用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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
php邮件发送的两种方式
Apr 28 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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
克隆一个新项目的快捷方式
2013/04/10 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
python算法学习之计数排序实例
2013/12/18 Python
跟老齐学Python之Import 模块
2014/10/13 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python实现简单的购物程序代码实例
2020/03/03 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
先进集体获奖感言
2014/02/13 职场文书
出国留学经济担保书
2014/04/01 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
美丽人生观后感
2015/06/03 职场文书
中学总务处工作总结
2015/08/12 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python