乌徒帮技术范WEB开发PHP › php中urlencode()处理网址字符集转换及相关函数

php中urlencode()处理网址字符集转换及相关函数

分类:PHP

urlencode()将网址中除了“-_.”之外的所有非字母数字字符都将被替换成百分号“%”后跟两位十六进制数。urldecode()是其反函数。本文详细解释了php中用urlencode()函数处理网址的方法及相关函数,通过例子让读者了解urlencode()函数在什么情况下实现什么样的效果。

urlencode()背景信息

urlencode的方式一般有两种,一种是传统的基于GB2312的encode(Baidu、Yisou等使用),另一种是基于UTF-8的encode(Google、Yahoo等使用)。这里的GB2312和UTF8你可以理解为将文件另存为的文件编码格式。总的来说,urlencode()对UTF8支持的更好。

在GB2312下urlencode('中文')将得到%D6%D0%CE%C4,在UTF8下将得到%E4%B8%AD%E6%96%87。我们在用浏览器留言一些网址有中文的网页时能很清晰得到这样的效果,不过现在很多浏览器都能正确解析中文网址,IE6浏览器仍遵循旧的中文网址转换规则。

有人尝试过,Firefox对GB2312的Encode的中文URL支持不好,因为它默认是UTF-8编码发送URL的,但是ftp://协议可以。

php中如何运用urlencode()及实例

1、urlencode将一串带有中文的字符串网址转换为字母串网址

echo urlencode('http://utubon.com/中文.rar');将印出http%3A%2F%2Futubon.com%2F%E4%B8%AD%E6%96%87.rar。注意,http://中的斜杠也会被转换为%2F。

2、urldecode将含有字符串的网址转换为中文网址

如将上面的网址重新转回了:echo urldecode('http://utubon.com/%E4%B8%AD%E6%96%87.rar');将印出http://utubon.com/中文.rar。

rawurlencode

urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。

?<?php
//GB2312的Encode
echo urlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.+
echo urldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_.
echo rawurlencode("中文-_. ")."\n"; //%D6%D0%CE%C4-_.%20
echo rawurldecode("%D6%D0%CE%C4-_. ")."\n"; //中文-_.
?>

使用mb_convert_encoding函数

httpd.ini使用详解:重定向、绑定目录、wordpress固定链接一文中提到了该函数,用以解决wordpress无法识别中文标签网址的情况。

echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";
echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";

mb_convert_encoding用以转换字符编码,上面代码中第一个将utf-8转换为gb2312。实例:

<?php
function parseurl($url="")
{
$url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8'));
$a = array("%3A", "%2F", "%40");
$b = array(":", "/", "@");
$url = str_replace($a, $b, $url);
return $url;
}
$url="ftp://user:password@utubon.com/中文/中文.rar";
echo parseurl($url);
//ftp://user:password@utubon.com/%D6%D0%CE%C4/%D6%D0%CE%C4.rar
?>

JavaScript中的urlencode

如:%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20

encodeURI不对下列字符进行编码:“:”、“/”、“;”、“?”、“@”等特殊字符。

如:http://utubon.com/%E4%B8%AD%E6%96%87.rar

http%3A%2F%2Futubon.com%2F%E4%B8%AD%E6%96%87.rar

填写个人信息,赶快回复吧!