PHP URL编码/解码

时间:2011-04-14 11:03:32

标签: php url url-encoding

我使用此question接受的解决方案进行id加密,例如 /index.php?id=3 。问题是我无法将加密值作为网址发送,例如 /index.php?id=dsf13f3343f23/23 = 。因为有时它会在网址中包含奇怪的字符,例如注意最后的=标志

4 个答案:

答案 0 :(得分:21)

应使用urlencode()对网址中传递的值中的奇怪字符进行转义。


例如,以下代码部分:

echo urlencode('dsf13f3343f23/23=');

会给你:

dsf13f3343f23%2F23%3D

哪个工作正常,作为URL参数。


如果您想使用多个参数构建aquery字符串,请查看http_build_query()函数。

例如:

echo http_build_query(array(
    'id' => 'dsf13f3343f23/23=',
    'a' => 'plop',
    'b' => '$^@test', 
));

会给你:

id=dsf13f3343f23%2F23%3D&a=plop&b=%24%5E%40test

此函数处理转义和连接参数本身; - )

答案 1 :(得分:4)

使用PHP的urlencode()函数对值进行编码,然后再将其放入URL中。

  

string urlencode ( string $str )
  这个功能很方便   编码要在a中使用的字符串   查询URL的一部分,方便   将变量传递给下一个的方法   页。

此函数将“奇怪”字符(例如=)转换为可安全放入URL的格式。您可以像这样使用它:

Header('Location: /index.php?id=' . urlencode($id))

答案 2 :(得分:4)

如果您使用Base64对URL的二进制值进行编码,则还有variant with URL and filename safe alphabet

您可以使用strtr function将一个字母表转换为另一个字母:

$base64url = strtr($base64, '+/', '-_');
$base64 = strtr($base64url, '-_', '+/');

因此,您可以使用这些函数对 base64url 进行编码和解码:

function base64url_encode($str) {
    return strtr(base64_encode($str), '+/', '-_'));
}
function base64url_decode($base64url) {
    return base64_decode(strtr($base64url, '-_', '+/'));
}

另见my answer on What is a good way to produce an short alphanumeric string from a long md5 hash?

答案 3 :(得分:1)

加密参数没有用处 按原样发送:

/index.php?id=3 

没有错。