base64
是一种常见的的编码格式,它可以把二进制数据编码成一个由大小写英文字母(a-zA-Z
)、阿拉伯数字(0-9
),以及三个特殊字符+
、/
、=
组成的字符串。
但是在URL传输中,+
、/
、=
这三个特殊字符是保留字符(或者叫不安全字符),如果将编码后的base64字符串直接用于URL传输,可能会有意外发生。例如,假设base64编码后的字符串是x+y
,前端访问=x+y
,后端接收到的name
参数的值却是x y
,+
号不见了,变成了空格。
只要我们在传递base64字符串之前对其进行URL编码,这些特殊字符就会被转义,这样就不会影响后端接收参数。PHP代码示例:
$encoded = base64_encode('举头望明月');
$params = ['name' => $encoded ];
$url = '?' . http_build_query($params);
echo $url;
注:只要参数是以query string(参数放在URL后面),或者是以POST(x-www-form-urlencoded)的形式传输的,都应对参数做URL编码处理。
urlsafe版本的base64
编码,其实就是对编码后的字符串做一些字符替换的操作:
+
字符替换为-
/
字符替换为_
=
字符替换为空字符串(即删除=
字符)替换后就可以安全在URL中传输了。
解码则是一个逆向过程,将-
替换为+
,将_
替换为/
,还有补上=
号。
urlsafe版本的base64
编解码示例(PHP):
// 编码
function urlsafeB64Encode($input)
{return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
}// 解码
function urlsafeB64Decode($input)
{$remainder = strlen($input) % 4;if ($remainder) {$padlen = 4 - $remainder;$input .= str_repeat('=', $padlen);}return base64_decode(strtr($input, '-_', '+/'));
}
本文发布于:2024-02-04 22:11:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170717554660058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |