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实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php中file_exists函数使用详解
May 08 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
PHP实现简单的协程任务调度demo示例
Feb 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
php 获取客户端的真实ip
2009/11/30 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP多线程类及用法实例
2014/12/03 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
javascript dom 操作详解 js加强
2009/07/13 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python调用服务接口的实例
2019/01/03 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
环保小标语
2014/06/13 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫
python数字图像处理实现图像的形变与缩放
2022/06/28 Python