[英]PHP URL Encoding / Decoding
我使用了此问题接受的解决方案,例如在/index.php?id=3中通过id进行加密。 问题是我无法将加密值作为网址发送,例如/index.php?id=dsf13f3343f23/23= 。 因为有时它会在网址中包含奇怪的字符,例如最后注意=
符号
应使用urlencode(
)转义URL中传递的值中的奇怪字符 。
例如,以下代码部分:
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
此函数处理参数本身的转义和连接;-)
在将值放入URL之前,使用PHP的urlencode()
函数对值进行编码。
string
urlencode
( string
$str
)
编码要在URL的查询部分中使用的字符串时,此函数很方便,这是将变量传递到下一页的便捷方式。
此函数将“奇怪”字符(例如=
)转换为可安全放入URL的格式。 你可以像这样使用它:
Header('Location: /index.php?id=' . urlencode($id))
如果使用Base64对URL的二进制值进行编码,则还有一个带URL和文件名安全字母的变体 。
您可以使用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
这没什么不对。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.