PHP base64编码后解码乱码的解决办法
最近再忙编写一个基于安卓的资产管理系统。
服务器端采用的是PHP+mySQL的编写,安卓客户端将SQL 语句BASE64编码后 用GET的方式 传输到服务器端,保存数据。
却发现有时候能成功 有时候不能成功,研究了好久,初步定位是PHP端的问题。
PHP
<?php
//echo "//输入BASE64处理的SQL 语句 ";
include_once("chkpsw.php");
$SQL = $_GET["SQL"];
$SQL=base64_decode($SQL);
echo $SQL;
$r=mysqli_query($cn,$SQL);
if($r)
echo "OK!";
else
echo "fail!";
mysqli_close($cn);
?>
我的代码也很简单 就这么几句
解码后显示传过来的SQL 语句如果包含部分中文大概率出现乱码。
那应该是解码的问题了, 上网查了一下,有朋友也有类似的问题,GET方式上来后会把部分的+给替换成空格
执行了一下替换语句 换回去就解决问题了。
PHP
$SQL = $_GET["SQL"];
$SQL = str_replace(" ","+",$SQL);
$SQL=base64_decode($SQL);
参考文章:
PHP安全的URL字符串base64编码和解码
如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址。下面的方法可以解决该问题:
URL安全的字符串编码:
代码如下:
function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}
URL安全的字符串解码:
代码如下:
function urlsafe_b64decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}
登录后可发表评论
点击登录