php的urlencode()URL编码函数浅析


Posted in PHP onAugust 09, 2011

URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。

本工具分别实现两种方式的Encode与Decode:

中文 -> GB2312的Encode -> %D6%D0%CE%C4

中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87

Html中的URLEncode:

编码为GB2312的html文件中:http://s.3water.com/中文.rar -> 浏览器自动转换为 -> http://s.3water.com/%D6%D0%CE%C4.rar

注意:Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以,我试过了,我认为这应该算是Firefox一个bug。

编码为UTF-8的html文件中:http://s.3water.com/中文.rar -> 浏览器自动转换为 -> http://s.3water.com/%E4%B8%AD%E6%96%87.rar

PHP中的URLEncode:

<?php 
//GB2312的Encode 
echo urlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.+ 
echo urldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_. 
echo rawurlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.%20 
echo rawurldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_. 
?>

除了“-_.”之外的所有非字母数字字符都将被替换成百分号“%”后跟两位十六进制数。

urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。

如果要使用UTF-8的Encode,有两种方法:

一、将文件存为UTF-8文件,直接使用urlencode、rawurlencode即可。

二、使用mb_convert_encoding函数:

<?php 
$url = 'http://s.3water.com/中文.rar'; 
echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n"; 
echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n"; 
//http%3A%2F%2Fs.3water.com%2F%E4%B8%AD%E6%96%87.rar 
?>

实例:

<?php 
function parseurl($url="") 
{ 
$url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8')); 
$a = array("%3A", "%2F", "%40"); 
$b = array(":", "/", "@"); 
$url = str_replace($a, $b, $url); 
return $url; 
} 
$url="ftp://ud03:password@s.3water.com/中文/中文.rar"; 
echo parseurl($url); 
//ftp://ud03:password@s.3water.com/%D6%D0%CE%C4/%D6%D0%CE%C4.rar 
?>

JavaScript中的URLEncode:

如:%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20

encodeURI不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。

如:http://s.3water.com/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fs.3water.com%2F%E4%B8%AD%E6%96%87.rar

PHP 相关文章推荐
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
php array的学习笔记
May 10 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
php简单的会话类代码
Aug 08 #PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 #PHP
兼容firefox,chrome的网页灰度效果
Aug 08 #PHP
用php解析html的实现代码
Aug 08 #PHP
php中设置多级目录session的问题
Aug 08 #PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 #PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 #PHP
You might like
PHP实现图片简单上传
2006/10/09 PHP
转PHP手册及PHP编程标准
2006/12/17 PHP
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
Php Cookie的一个使用注意点
2008/11/08 PHP
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
yii操作cookie实例简介
2014/07/09 PHP
基于json的jquery地区联动效果代码
2011/07/06 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python re模块findall()函数实例解析
2018/01/19 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
对Python函数设计规范详解
2019/07/19 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
质检的岗位职责
2013/11/17 职场文书
天猫活动策划方案
2014/08/21 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书