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不用正则采集速度探究总结
Mar 24 PHP
PHP中的float类型使用说明
Jul 27 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php三种实现多线程类似的方法
Oct 30 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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使用curl存储cookie的示例
2014/03/31 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
浅谈React高阶组件
2018/03/28 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
vue生命周期实例小结
2018/08/15 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Cpy和Python的效率对比
2015/03/20 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python tqdm库的使用
2020/11/30 Python
Python中的流程控制详解
2021/02/18 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
担保书格式
2015/01/20 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技