PHP中文URL编解码(urlencode()rawurlencode()


Posted in PHP onJuly 03, 2010

下面是详细解释:///\\\
string urlencode ( string str)
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页: 例子 1. urlencode() 示例

<?php 
echo '<a href="mycgi?foo=', urlencode($userinput), '">'; 
?>

注意:小心与 HTML 实体相匹配的变量。像 &、© 和 £ 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP 通过 arg_separator .ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 & 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities(urlencode($data)) 对你的 URL 进行编码。
例子 2. urlencode() 与 htmlentities() 示例
<?php 
echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">'; 
?>

string urlencode ( string str)
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 FTP 的 URL 中包含密码:
例子 1. rawurlencode() 示例 1

<?php 
echo '<a href="ftp://user:', rawurlencode('foo @+%/'), 
'@ftp.my.com/x.txt">'; 
?>

或者,如果你想通过 URL 的 PATH_INFO 构成部分去传递信息:
例子 2. rawurlencode() 示例 2

<?php 
echo '<a href="http://x.com/department_list_script/', 
rawurlencode('sales and marketing/Miami'), '">'; 
?>

在解码时,可以使用相应的 urldecode() 和 rawurldecode(),相应地,rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。 下面是详细示例:
string urldecode ( string str)
解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 例子 1. urldecode() example

<?php 
$a = explode('&', $QUERY_STRING); 
$i = 0; 
while ($i < count($a)) { 
$b = split('=', $a[$i]); 
echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])), 
' is ', htmlspecialchars(urldecode($b[1])), "<br />n"; 
$i++; 
} 
?>

string rawurldecode ( string str)
返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。
例子 1. rawurldecode() 示例
<?php 
echo rawurldecode('foo%20bar%40baz'); // foo bar@baz 
?>

但是,有一点需要注意的地方是,urldecode() 和 rawurldecode() 解码出的字符串是 UTF-8格式的编码,如果URL中含有中文的话,而页面设置又不是 UTF-8 的话,则要把解码出的字符串进行转换,才能正常显示!
还有一个问题,就是所获得的 URL 不是 %%nn n={0..F} 的格式,而是 %unnnn n={0..F} 的格式,这时候再使用 urldecode() 和 rawurldecode() 是无法正确解码的,而要用下面这个函数才能正确解码:
function utf8RawUrlDecode ($source) 
{ 
$decodedStr = ""; 
$pos = 0; 
$len = strlen ($source); 
while ($pos < $len) { 
$charAt = substr ($source, $pos, 1); 
if ($charAt == '%') { 
$pos++; 
$charAt = substr ($source, $pos, 1); 
if ($charAt == 'u') { 
// we got a unicode character 
$pos++; 
$unicodeHexVal = substr ($source, $pos, 4); 
$unicode = hexdec ($unicodeHexVal); 
$entity = "&#". $unicode . ';'; 
$decodedStr .= utf8_encode ($entity); 
$pos += 4; 
} 
else { 
// we have an escaped ascii character 
$hexVal = substr ($source, $pos, 2); 
$decodedStr .= chr (hexdec ($hexVal)); 
$pos += 2; 
} 
} else { 
$decodedStr .= $charAt; 
$pos++; 
} 
} 
return $decodedStr; 
}
PHP 相关文章推荐
php $_SERVER当前完整url的写法
Nov 12 PHP
php+javascript的日历控件
Nov 19 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
微信公众平台DEMO(PHP)
May 04 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
PHP中list方法用法示例
Dec 01 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
php的一些小问题
Jul 03 #PHP
php HtmlReplace输入过滤安全函数
Jul 03 #PHP
php下mysql数据库操作类(改自discuz)
Jul 03 #PHP
php下通过伪造http头破解防盗链的代码
Jul 03 #PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 #PHP
php防盗链的常用方法小结
Jul 02 #PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 #PHP
You might like
PHP+DBM的同学录程序(4)
2006/10/09 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
PHP中文乱码解决方案
2015/03/05 PHP
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
react基本安装与测试示例
2020/04/27 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
Python 查看文件的编码格式方法
2017/12/21 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
Hibernate持久层技术
2013/12/16 面试题
陈欧的广告词
2014/03/18 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
普通党员对照检查材料
2014/08/28 职场文书
大一新生检讨书
2014/10/29 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
教师节寄语2015
2015/03/23 职场文书
专家推荐信怎么写
2015/03/25 职场文书
医院病假条范文
2015/08/17 职场文书