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 如何向 MySQL 发送数据
Oct 09 PHP
php zlib压缩和解压缩swf文件的代码
Dec 30 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
sphinx增量索引的一个问题
Jun 14 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP实现的简单缓存类
Jul 29 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
Yii框架连表查询操作示例
Sep 06 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定时执行计划任务的多种方法小结
2011/12/19 PHP
mysql总结之explain
2012/02/27 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
python监控nginx端口和进程状态
2019/09/06 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
Django权限设置及验证方式
2020/05/13 Python
Django如何使用redis作为缓存
2020/05/21 Python
美国精油公司:Plant Therapy
2019/05/17 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
房屋租赁意向书
2014/04/01 职场文书
小学毕业演讲稿
2014/04/25 职场文书
财务情况说明书范文
2014/05/06 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
Java移除无效括号的方法实现
2021/08/07 Java/Android