繁体   English   中英

PHP URL编码/解码

[英]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, '-_', '+/'));
}

另请参阅我的答案有关从长md5哈希生成短字母数字字符串的好方法是什么?

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

/index.php?id=3 

这没什么不对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM