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 相关文章推荐
mysql建立外键
Nov 25 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php单例模式示例分享
Feb 12 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python制作数据导入导出工具
2015/07/31 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
python实现Adapter模式实例代码
2018/02/09 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
基于opencv实现简单画板功能
2020/08/02 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
what is the difference between ext2 and ext3
2013/11/03 面试题
网络技术专业求职信
2014/07/13 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
Python可视化神器pyecharts绘制水球图
2022/07/07 Python