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中用文本文件做数据库的实现方法
Mar 27 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
PHP开发Apache服务器配置
Jul 15 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 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语法(3)
2006/10/09 PHP
很实用的一个完整email发送程序
2006/10/09 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
webpack多页面开发实践
2017/12/18 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
浅谈Python中的数据类型
2015/05/05 Python
python 队列详解及实例代码
2016/10/18 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
python的re正则表达式实例代码
2018/01/24 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
往来会计岗位职责
2013/12/19 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
财务会计求职信范文
2015/03/20 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书