(1)urlencode 函数:
返回字符串,此字符串中除了 - _ . 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与application/x-www-form-urlencoded的媒体类型编码方式一样。
(2)rawurlencode 函数:
返回字符串,此字符串中除了 - _ . 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
(3)具体请参考以下例子:
- <?php
- //urlencode和rawurlencode的区别
- $str1 = urlencode(':/?= &#');
-
$str2 = rawurlencode(':/?= &#');
-
echo $str1."<br/>";
-
echo $str2."<br/>";
-
//唯一的不同是对空格的处理,urlencode处理成"+",rawurlencode处理成"%20"。
-
//urlencode使用方法:
-
$foo = "web php.程序员_123";
-
$bar = "shutdown -h now";
-
-
//urlencode只需对参数内容编码即可。
-
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
-
echo 'mycgi?' . htmlentities($query_string) . '';
-
//输出: mycgi?foo=web+php.%e7%a8%8b%e5%ba%8f%e5%91%98_123&bar=shutdown+-h+now
-
-
?>
通过以上2个例子,总结如下:
1. 数字、大小写字母都不编码。
2. 减号、点号、下划线 三个不编码。
3. rawurlencode比urlencode多编码一个加号("+")。