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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php session应用实例 登录验证
Mar 16 PHP
php中定义网站根目录的常用方法
Aug 08 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
解析php如何将日志写进syslog
Jun 28 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php批量上传的实现代码
2013/06/09 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
python 获取字符串MD5值方法
2018/05/29 Python
Python get获取页面cookie代码实例
2018/09/12 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
护理专科毕业推荐信
2013/11/10 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
校庆活动方案
2014/03/31 职场文书
趣味运动会策划方案
2014/06/02 职场文书
委托书的格式
2014/08/01 职场文书
具结保证书
2015/01/17 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
js判断两个数组相等的5种方法
2022/05/06 Javascript
mysql 获取相邻数据项
2022/05/11 MySQL