起因:之前给凤凰做的跳板接口 原文在这 ,今天发现生成的base64的参数解码出来一直是false
解决方案:
有时候用base64_encode加密后,以GET的形式传到其他页面,用base64_decode解密的时候,出现乱码.
遇到这个问题的时候,我就纳闷了,为什么有一些能正确解密,但是有一些却出现乱码呢?
后来经过检查,发现有一些中文字符,用GET形式传过来的时候,+号会被替换成空格.
为了防止出现乱码的情况,我做了一步替换,然后再解密,果然,乱码的问题,不复存在了!
比如你以GET的形式传过来一个url变量,那么解密还原的时候,先用+号替换空格.那么输出就正常了.
如下:
<?
//获取url 链接
//***********
$url=”https://llpay.com?xxxxx=xxx&xxx=xx”;
// 处理base64转码中的+号问题
if (stripos($url,” “)!==FALSE) {
$url=str_replace(” “,”+”,$url);
}
$url=base64_decode( $url );
$checkurl=parse_url($url);
if (!$checkurl[‘scheme’] || !$checkurl[‘host’]) {
// p( parse_url($url));
die(‘err URL’);
}
$query=$checkurl[‘query’];
$urlarr=array();
parse_str($checkurl[‘query’],$urlarr);
$url2= http_build_query($urlarr);
$url3=$checkurl[‘scheme’].’://’.$checkurl[‘host’].$checkurl[‘path’].’?’.$url2;
if(strpos($_SERVER[‘HTTP_USER_AGENT’],”MSIE”)) {
echo ‘<!DOCTYPE html><html lang=”en”><head> <meta charset=”UTF-8″> <title></title></head><body>’;
echo “<script>var url='”.$url.”‘; //var newTab1=window.open(‘about:blank’); newTab1.location.href=url; </script>”;
echo “<script> window.onload=function(){ window.location.href=url; } </script>”;
echo ‘</body></html>’;
return;
}
echo ‘<script type=”text/javascript”>var url=\”.$url.’\’;window.location.href=url; </script>’;
// redirect( $url );
// header(‘Location: ‘.$url ,TRUE,301);
die;
欢迎大家加入我们的QQ群:307469859