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