PHP使用urlencode对中文编码时空格、加号的问题
使用urlencode这个函数进行格式化,urlencode函数会把空格编码为为:+ 当然,前端在接收时可以解码后进行替换 + 为空格的方式处理。 但是这样就多做了一步,很麻烦,有的时候我们的数据接口是开发给第三方或者其他使用的,他们在处理中不一定完全按照这样的思路来做。 解决方案: 使用rawurlencode 在PHP中,urlencode把空格编码为+号,rawurlencode把空格编码为%20 urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的,唯一的不同是对空格的处理,urlencode处理成“+”,rawurlencode处理成“%20”。
$str = 'web php.程序员 参数'; //urlencode 和 rawurlencode 的区别 $str1 = urlencode($str); $str2 = rawurlencode($str); $str3 = urldecode($str1); $str4 = rawurldecode($str2); echo $str1."<br/>"; echo $str2."<br/>"; echo $str3."<br/>"; echo $str4."<br/>";
(1)urlencode 函数:
返回字符串,此字符串中除了 - _ . 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与application/x-www-form-urlencoded的媒体类型编码方式一样。
(2)rawurlencode 函数:
返回字符串,此字符串中除了 - _ . 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。
这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
总结如下:
1. 数字、大小写字母都不编码。
2. 减号、点号、下划线 三个不编码。
3. rawurlencode 比 urlencode 多编码一个加号("+")。