PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。下面是详细解释:
1
|
string urlencode( string str) |
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
例子 1 :urlencode函数与rawurlencode函数区别
1
2
3
4
|
$str = '博 客' ; echo urlencode( $str ); echo "<br>" ; echo rawurlencode( $str ); |
url结果:
1
2
|
%B2%A9+%BF%CD %B2%A9%20%BF%CD |
例子 2 :url中文编码方法
从url:"http://www.baidu.com/s?wd=博 客" 转为 url:"http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2";
1
2
3
4
|
$url = 'http://www.baidu.com/s?wd=博
客' ; $arr = explode ( '=' , $url ); $url = $arr [0]. '=' .rawurlencode( $arr [1]); echo $url ; |
结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
或许用以下url编码函数
1
2
3
4
5
6
7
8
9
10
11
12
|
function cn_urlencode( $url ){ $pregstr = "/[x{4e00}-x{9fa5}]+/u" ; //UTF-8中文正则 if (preg_match_all( $pregstr , $url , $matchArray )){ //匹配中文,返回数组 foreach ( $matchArray [0] as $key => $val ){ $url = str_replace ( $val ,
urlencode( $val ), $url ); //将转译替换中文 } if ( strpos ( $url , '
' )){ //若存在空格 $url = str_replace ( '
' , '%20' , $url ); } } return $url ; } |
url结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2