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中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
php分页思路以及在ZF中的使用
May 30 PHP
基于php iconv函数的使用详解
Jun 09 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP实现腾讯与百度坐标转换
Aug 05 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php获取汉字首字母的函数
2013/11/07 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
js实现微信分享代码
2020/10/11 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
详解vuex commit保存数据技巧
2018/12/25 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
Python解析最简单的验证码
2016/01/07 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
python的re模块使用方法详解
2019/07/26 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
德尔福集团DELPHI的笔试题
2012/02/22 面试题
还款承诺书范文
2014/05/20 职场文书
销售2014年度工作总结
2014/12/08 职场文书
文员岗位职责范本
2015/04/16 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS