PHP base64编码后解码乱码的解决办法

2020-09-15 13:36:16  阅读 3728 次 评论 0 条

最近再忙编写一个基于安卓的资产管理系统。

服务器端采用的是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);
 }


本文地址:https://jinesc.net/?id=191
版权声明:本文为原创文章,版权归 jinesc 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?