在base64转码时,+
号在url中会被转成空格,/
号会被当成url分隔符,而我们又习惯在接收到参数后过滤参数两端的空格,所以如果在浏览器url上传输这些值,拿到值后再过滤掉两端的空格,然后再decode这个base64编码,结果肯定会出问题。比如松
字的base64编码是5p2+
,蕾
字的base64编码是6JW+
,我们试试把+号去掉再decode:
var_dump(base64_decode('5p2'));
var_dump(base64_decode('6JW'));
为了避免这个问题,我们可以把+
号换成横杠-
,/
号换成下划线_
,然后再在url上传输,接收到参数后,只要在解码前把这两个特殊替换回+
号和/
号,然后再解码,这样就不会出错了,下面是一个PHP的实现方法示例:
<?php
/**
* base64_encode后,把+替换成-,把/替换成_,因为这两个符号在url中会被转换
* @param $str
* @return mixed
*/
function base64Encode($str){
return strtr(base64_encode($str), '+/', '-_');
}
/**
* 把-替换回+,把_替换回/后,再decode
* @param $str
* @return mixed
*/
function base64Decode($str){
return base64_decode(strtr($str, '-_', '+/'));
}
?>