最近再忙编写一个基于安卓的资产管理系统。
服务器端采用的是PHP+mySQL的编写,安卓客户端将SQL 语句BASE64编码后 用GET的方式 传输到服务器端,保存数据。
却发现有时候能成功 有时候不能成功,研究了好久,初步定位是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方式上来后会把部分的+给替换成空格
执行了一下替换语句 换回去就解决问题了。
$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);
}
发表评论