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的FTP学习(一)[转自奥索]
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
php获取网页上所有链接的方法
Apr 03 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
php使用curl代理实现抓取数据的方法
Feb 03 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python中的多重装饰器
2015/04/11 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
python日志logging模块使用方法分析
2019/05/23 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
上班看电影检讨书
2014/02/12 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
党员民主评议总结
2014/10/20 职场文书
立春观后感
2015/06/18 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python