h5网站开发,企业标准化体系建设流程,大岭山建设网站,制作公司简介前言
base64是一种常见的的编码格式#xff0c;它可以把二进制数据编码成一个由大小写英文字母#xff08;a-zA-Z#xff09;、阿拉伯数字#xff08;0-9#xff09;#xff0c;以及三个特殊字符、/、组成的字符串。
问题
但是在URL传输中#xff0c;、/、这三个特殊…前言
base64是一种常见的的编码格式它可以把二进制数据编码成一个由大小写英文字母a-zA-Z、阿拉伯数字0-9以及三个特殊字符、/、组成的字符串。
问题
但是在URL传输中、/、这三个特殊字符是保留字符或者叫不安全字符如果将编码后的base64字符串直接用于URL传输可能会有意外发生。例如假设base64编码后的字符串是xy前端访问https://www.mysite.com?namexy后端接收到的name参数的值却是x y号不见了变成了空格。
解决方案
一、在传递参数前先对其进行URL编码
只要我们在传递base64字符串之前对其进行URL编码这些特殊字符就会被转义这样就不会影响后端接收参数。PHP代码示例
$encoded base64_encode(举头望明月);
$params [name $encoded ];
$url https://www.mysite.com? . http_build_query($params);
echo $url;注只要参数是以query string参数放在URL后面或者是以POST(x-www-form-urlencoded)的形式传输的都应对参数做URL编码处理。 二、使用urlsafe版本的base64编码
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, -_, /));
}