使用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+SqlServer实现分页显示
Oct 09 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
YII中assets的使用示例
Jul 31 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
PHP静态文件生成类实例
Nov 29 PHP
php实现zip文件解压操作
Nov 03 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
PHP 文件上传限制问题
Sep 01 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 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的控制语句
2006/10/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
使用npm安装最新版本nodejs
2018/01/18 NodeJs
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python实现类继承实例
2014/07/04 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python编写Windows Service服务程序
2018/01/04 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
Python笔记之代理模式
2019/11/20 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
标准导师推荐信(医学类)
2013/10/28 职场文书
军人违纪检讨书
2014/02/04 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
2015年入党决心书
2015/02/05 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
初三毕业感言
2015/07/31 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
数据设计之权限的实现
2022/08/05 MySQL