PHP判斷字符串是否是base64編碼


在列表展示用戶信息的時候發現有是base64的微信昵稱,還有一些並不是base64的字符,所以就需要判斷字符是否需要base64解碼。
這時就要通過判斷來進行解碼,然后在網上找了一些方法。如下:

$str = "5L2g5aW9"; 
if ($str == base64_encode(base64_decode($str))) { 
    echo 'yes'; 
}else{ 
    echo 'no'; 
} 

以上只能判斷百分之60左右的base64編碼后的字符串 如果遇到字符串長度比較短或者純字母以及純數字的話.那么這個判斷就歇菜了。
長度為1的非base64編碼字符串在base64解碼后的內容是空,長度為2以上非base64編碼的字符串解碼后是顯示亂碼,此時靈感一來。就根據空、亂碼來判斷是否base64編碼。
以下是根據字符串是否utf8編碼來判斷的:

//判斷字符串是否經過編碼方法
public function is_base64($str){ //這里多了個純字母和純數字的正則判斷 if(@PReg_match('/^[0-9]*$/',$str) || @preg_match('/^[a-zA-Z]*$/',$str)){ return false; }elseif($this->is_utf8(base64_decode($str)) && base64_decode($str) != ''){ return true; } return false; } //判斷否為UTF-8編碼 function is_utf8($str){ $len = strlen($str); for($i = 0; $i < $len; $i++){ $c = ord($str[$i]); if($c > 128){ if(($c > 247)){ return false; }elseif($c > 239){ $bytes = 4; }elseif($c > 223){ $bytes = 3; }elseif ($c > 191){ $bytes = 2; }else{ return false; } if(($i + $bytes) > $len){ return false; } while($bytes > 1){ $i++; $b = ord($str[$i]); if($b < 128 || $b > 191){ return false; } $bytes--; } } } return true; }

以上代碼可以判斷百分之99字符串是否base64編碼,前提字符串編碼是在UTF8下。

is_base64(‘1’) //false 
is_base64(1)//false 
is_base64(base64_encode(‘測試下’))//true
Author:XueDing_
Email:361169632@qq.com
注明出處:https://www.cnblogs.com/best-always/p/12036070.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM