使用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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
destoon官方标签大全
Jun 20 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 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 mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python实现文本文件合并
2015/12/29 Python
学习python类方法与对象方法
2016/03/15 Python
详解python中递归函数
2019/04/16 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
python将数据插入数据库的代码分享
2020/08/16 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
《钱学森》听课反思
2014/03/01 职场文书
投资意向书范本
2014/04/01 职场文书
先进基层党组织材料
2014/12/25 职场文书
硕士论文致谢范文
2015/05/14 职场文书
高二化学教学反思
2016/02/22 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android