使用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 ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
Php图像处理类代码分享
Jan 19 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
php实现快速排序法函数代码
Aug 27 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
php检测文件编码的方法示例
Apr 25 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
php定时执行任务设置详解
Feb 06 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
laravel学习教程之存取器
Jul 30 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 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表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
python写入xml文件的方法
2015/05/08 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Python读取表格类型文件代码实例
2020/02/17 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
大学生旷课检讨书
2014/01/22 职场文书
2014年端午节活动方案
2014/03/11 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
大学生简短的自我评价
2014/09/12 职场文书
Java 数组的使用
2022/05/11 Java/Android