使用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 相关文章推荐
用PHP实现多级树型菜单
Oct 09 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
解析php中反射的应用
Jun 18 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
ThinkPHP之N方法实例详解
Jun 20 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
php去除字符串中空字符的常用方法小结
Mar 17 PHP
php需登录的文件上传管理系统
Mar 21 PHP
PHP微信开发之模板消息回复
Jun 24 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中鲜为人知的10个函数
2014/02/28 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
Python可迭代对象操作示例
2019/05/07 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
如何用python处理excel表格
2020/06/09 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
情人节活动策划方案
2014/02/27 职场文书
教师听课评语大全
2014/12/31 职场文书
2015年少先队活动总结
2015/03/25 职场文书
爱国主题班会教案
2015/08/14 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python