使用PHP的urlencode()函数进行URL编码和解码
URL编码是指将URL中的一些特殊字符转换成一些可识别的字符,以确保可以正确地传递数据。URL解码则是将URL中的已编码的字符转换成它们原本的形式。PHP提供了urlencode()和urldecode()函数,分别用于URL编码和解码。
urlencode()函数将指定的字符串进行URL编码,并返回编码后的字符串。它的用法如下:
string urlencode ( string $str )
其中,$str是要进行编码的字符串。例如,要将字符串“hello world”进行URL编码,可以这样写:
echo urlencode("hello world");
输出结果是:
hello+world
可以看到,空格被转换成了加号(+)。实际上,在URL中,空格通常被编码成 %20。如果要将空格编码成 %20,可以使用rawurlencode()函数。
urldecode()函数则是将URL编码后的字符串进行解码,使其恢复成原来的字符串。它的用法如下:
string urldecode ( string $str )
其中,$str是要进行解码的字符串。上面例子中的“hello+world”可以使用urldecode()函数进行解码,如下:
echo urldecode("hello+world");
输出结果是:
hello world
可以使用两个函数结合起来,实现将URL中的所有字符进行编码和解码的功能。例如,以下代码将URL中的所有字符编码成%xx形式,然后再解码恢复成原来的URL:
$url = "http://www.example.com/?name=张三&age=18"; $encoded_url = urlencode($url); //编码成%xx形式 echo $encoded_url . " "; //输出编码后的URL $decoded_url = urldecode($encoded_url); //解码恢复成原来的URL echo $decoded_url . " "; //输出原来的URL
输出结果是:
http%3A%2F%2Fwww.example.com%2F%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D18 http://www.example.com/?name=张三&age=18
可以看到,原来的URL经过编码后变成了一串%xx形式的字符,然后通过解码操作又恢复成了原来的URL。
需要注意的是,urldecode()函数只能解码符合RFC 3986规范的编码格式,即将空格编码成+的编码方式并不符合规范,因此意外地使用urlencode()函数编码后如果使用urldecode()函数来解码时,这种编码方式可能无法被正确解码。而rawurlencode()函数则会将空格编码成%20的形式,符合RFC规范,因此在URL编码时使用rawurlencode()函数是更安全可靠的选择。
