我使用了这个问题中被接受的解决方案,例如在/index.php?id=3中加密id。问题是我无法将加密后的值作为url发送,例如/index.php?id=dsf13f3343f23/23=。因为有时候url中会出现奇怪的字符,比如末尾的
=
符号。=
符号。在传递URL中的数值时,奇怪的字符应该被转义,使用urlencode()
函数。
例如,以下代码部分:
echo urlencode('dsf13f3343f23/23=');
将会给你:
dsf13f3343f23%2F23%3D
作为URL参数,这很好用。
如果您想构建带有多个参数的查询字符串,请查看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
这个函数处理参数本身的转义和连接;-)
在将值放入URL之前,请使用PHP的urlencode()
函数对其进行编码。
string
urlencode
( string
$str
)
当需要编码字符串以在URL的查询部分中使用时,此函数非常方便,是传递变量到下一页的便捷方式。
该函数将“奇怪”的字符(例如=
)转换为安全放入URL的格式。您可以像这样使用它:
Header('Location: /index.php?id=' . urlencode($id))
strtr
函数将一个字母表翻译为另一个字母表:$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, '-_', '+/'));
}
加密参数没有用处。
按原样发送:
/index.php?id=3
没有任何问题。