有时,我们希望点击页面中的链接跳转其他页面,并且以get的方式传递一些参数。如果不对这些参数编码,可能会造成一些问题:
1. 参数中的空格可能会让你无法打开页面
2. 参数中的&符号会影响参数的解析
解决方法: 对链接中的参数编码,在请求的页面里先解析出参数,然后解码
具体做法:
1. 用urlencode函数对链接中的参数值 编码
$url = "http://www.baidu.com?firstname=" . rawurlencode($firstname);
此函数返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(% )后跟两位十六进
制数, 空格则编码为加号(+ )。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-
www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与
RFC1738 编码(参见 rawurlencode() )不同。
rawurlencode与urlcode几乎完全相同,除了将空格也编码成百分号(% )后跟两位十六进制数的形式。至
此,最好用rawurlencode。
$url = "http://www.baidu.com?firstname=" . rawurlencode($firstname);
2. 如果有多个参数的话,我们会用到&最为参数之间的分隔符。但是,如果参数值包含&符号,就可能造成参数解析错
误。 此时可以
$query_string = "?firstname=" . rawurlencode($firstname) . "&lastname=" . rawurlencode($lastname);
$url = "http://www.baidu.com" . htmlentities($query_string);
或者直接将&写成 &;
3. 在被请求的页面里使用urlencode或者rawurldecode解码:
$firstname = rawurldecode($_GET['firstname']);
Note(for myself):
1. 在涉及到编解码的问题是,只要保证用的字符集相同,就不会出现乱码的问题。
2. htmlentities vs html_entity_decode, htmlspecialchars vs htmlspecialchars_decode
3. htmlentities与htmlspecialchars的区别。