php中urlencode与rawurlencode的区别
发布:smiling 来源: PHP粉丝网 添加日期:2014-06-26 08:49:58 浏览: 评论:0
urlencode与rawurlencode函数是对url进行一些处理,但在处理时它们是有区别的,特别是对于些特殊字符时它们表现出来的是完全不一样的,下面我就来详细举例子来说明一下这两个url处理函数吧.
前段时间说自己遇到了个《URL加号引发错误》的BUG,引起这个bug的原因就是自己在URL中使用了 urlencode 函数,该函数会把空格转换成加号,这样就导致URL解析出错,而空格只有转换成 %20 才可以可以正常解析,这时我们就需要使用 rawurlencode 函数。下面就介绍一下 urlencode 函数与 rawurlencode 函数的区别.
urlencode 函数:
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+),此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样,由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同.
rawurlencode 函数:
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱,下面我们来看一下例子:
- <?php
- $string = "hello world";
- echo urlencode($string) . '<br/>'; //输出:hello+world
- echo rawurldecode($string) . '<br/>';//输出:hello%20world
- ?>
具体例子比较,代码如下:
- <?php
- for ($i = 0x20; $i < 0x7f; $i++) {
- $str .= dechex($i);
- }
- $asscii = pack("H*",$str);
- echo "所有的可打印的asscii字符:(从空格到~)n". $asscii."\n";
- echo "urlencode 的结果:\n".urlencode($asscii);
- echo "\n";
- echo "urlencode 不做编码的字符:\n".preg_replace("/%.{2}/","",urlencode($asscii));
- echo "\n";
- echo "rawurlencode 的结果:\n".rawurlencode($asscii);
- echo "\n";
- echo "rawurlencode 不做编码的字符:\n".preg_replace("/%.{2}/","",rawurlencode($asscii));
- echo "\n";
- exit;
- ?>
- /*输出结果:
- 所有的可打印的asscii字符:(从空格到~)
- !"#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~
- urlencode 的结果:
- +%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
- urlencode 不做编码的字符:
- +-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
- rawurlencode 的结果:
- %20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
- rawurlencode 不做编码的字符:
- -.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
- */
比较二者的结果:
1.数字、大小写字母都不编码
2.减号、点号、下划线 三个不编码
3.rawurlencode比urlencode多编码一个”加号“
Tags: urlencode rawurlencode
- 上一篇:PHP中exit()与die()的区别
- 下一篇:php根据ip获取地区的程序代码
相关文章
- ·php urlencode()函数实现URL编码解析(2013-12-04)
- ·PHP url中文编码cn_urlencode函数(2014-03-19)
- ·浅析rawurlencode()和urlencode()函数区别(2014-08-25)
- ·php urlencode 与 rawurlencode教程(2014-09-12)
- ·PHP如何使用urlencode()函数进行url编码?(代码示例)(2020-02-15)
- ·php自定义urlencode,urldecode函数实例(2021-05-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)