对中文URL进行编解码是Web开发中的一个常见需求。在PHP中,提供了两个函数来完成这个任务:urlencode和rawurlencode。下面详细讲解这两个函数的用法和区别。
urlencode函数是PHP内置函数,用于将URL中的非字母数字字符以及一些保留字符进行编码,以便于在URL传递时能够正确地传递参数。
语法:string urlencode ( string $str )
<?php
$str = '中文URL编码';
echo urlencode($str); // 输出:%E4%B8%AD%E6%96%87URL%E7%BC%96%E7%A0%81
?>
可以看到,urlencode将中文和URL中的其他保留字符都进行了编码。但是需要注意的是,urlencode并不会对空格进行编码,默认使用“+”来表示空格。如果需要使用“%20”来表示空格,可以使用str_replace函数进行替换。
<?php
$str = '中文 URL 编码';
echo str_replace('+', '%20', urlencode($str)); // 输出:%E4%B8%AD%E6%96%87%20URL%20%E7%BC%96%E7%A0%81
?>
对应的解码函数是urldecode:
语法:string urldecode ( string $str )
<?php
$str = '%E4%B8%AD%E6%96%87URL%E7%BC%96%E7%A0%81';
echo urldecode($str); // 输出:中文URL编码
?>
rawurlencode也是用于将URL中的非字母数字字符进行编码,但不同的是,它会对空格使用“%20”进行编码,而不是使用“+”。
语法:string rawurlencode ( string $str )
<?php
$str = '中文URL编码';
echo rawurlencode($str); // 输出:%E4%B8%AD%E6%96%87URL%E7%BC%96%E7%A0%81
?>
与urlencode类似,对应的解码函数是rawurldecode:
语法:string rawurldecode ( string $str )
<?php
$str = '%E4%B8%AD%E6%96%87URL%E7%BC%96%E7%A0%81';
echo rawurldecode($str); // 输出:中文URL编码
?>
除了空格的编码方式不同,urlencode与rawurlencode的编码结果是一样的,选择哪个函数主要取决于具体需求。
最后需要提醒的是,对于URL中出现的特殊字符(如“&”、“=”等),建议使用urldecode或rawurldecode进行解码后再进行处理,以避免对URL参数的正确性造成影响。