使用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和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php全排列递归算法代码
Oct 09 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
Yii框架弹出框功能示例
Jan 07 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php生成excel文件的简单方法
2014/02/08 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP安全下载文件的方法
2016/04/07 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP strripos函数用法总结
2019/02/11 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
JavaScript代码实现简单计算器
2020/12/27 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
py2exe 编译ico图标的代码
2013/03/08 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
python获取代理IP的实例分享
2018/05/07 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
手术室护士自我鉴定
2013/10/14 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL