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数据库操作类(改自discuz)
Jul 03 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
php PDO异常处理详解
Nov 20 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
php验证码生成器
May 24 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
PHP命令行与定时任务
Apr 01 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP 各种排序算法实现代码
2009/08/20 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
js轮播图代码分享
2016/07/14 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
vue项目实战总结篇
2018/02/11 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
python执行使用shell命令方法分享
2017/11/08 Python
django Admin文档生成器使用详解
2019/07/22 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
一年级学生评语
2014/04/23 职场文书
学术会议邀请函
2015/01/30 职场文书
光荣之路观后感
2015/06/12 职场文书
新郎婚礼致辞
2015/07/27 职场文书