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 编程请选择正确的文本编辑软件
Dec 21 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
Laravel5权限管理方法详解
Jul 26 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 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目录管理函数小结
2008/09/10 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
JS常用知识点整理
2017/01/21 Javascript
几种tab切换详解
2017/02/03 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
详解python tcp编程
2020/08/24 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
企划主管岗位职责
2013/12/12 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书