使用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 相关文章推荐
Email+URL的判断和自动转换函数
Oct 09 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php 文件缓存函数
Oct 08 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
PHP 文件系统详解
Sep 13 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
在PHP中使用redis
Nov 04 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
PHP常量及变量区别原理详解
Aug 14 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 strtr() 函数使用说明
2008/11/21 PHP
写出高质量的PHP程序
2012/02/04 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
layer插件select选中默认值的方法
2018/08/14 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
python统计一个文本中重复行数的方法
2014/11/19 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
打架检讨书2000字
2014/02/22 职场文书
大气污染防治方案
2014/05/19 职场文书
实验室标语
2014/06/21 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
校园广播稿100字
2014/10/06 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
社会实践活动报告
2015/02/05 职场文书
社团个人总结范文
2015/03/05 职场文书
Redis性能监控的实现
2021/07/09 Redis