這幾天一直在做php中關于base64編碼的邏輯,其中就有一項關于利用php判斷一個字符串是否為base64編碼。

国产视频app php中判斷一個字符串是否為base64編碼,通常的做法為,將這個字符串進行 base64_decode 解碼,然后再進行編碼,再對照原有的字符串,如果相等就是BASE64編碼后的字符串,如果不等就不是。當然還有其它的方法,下面來具體說一下。

php簡單的判斷字符串是否為base64編碼

自定義函數:

<?php
/**
 * 判斷字符串是不是base64編碼
 * base64_decode:解碼
 * base64_encode:再次編碼
 */
function is_base64($str){  
    return $str == base64_encode(base64_decode($str)) ? true : false;  
}
?>

函數使用:

<?php
$str = '飛鳥慕魚博客';
//對字符串進行base64編碼
$b = base64_encode($str);
echo $b;
echo '<br/>';
if(is_base64($b)){
    echo '是base64編碼';
}else{
    echo '不是base64編碼';
}
?>

輸出結果:

6aOe6bif5oWV6bG85Y2a5a6i
是base64編碼

注意:以上只能判斷百分之60左右的base64編碼后的字符串 如果遇到字符串長度比較短或者純字母以及純數字的話.那么這個方法就不行了。長度為1的非base64編碼字符串在base64解碼后的內容是空,長度為2以上非base64編碼的字符串解碼后是顯示亂碼。

php根據字符串是否utf8編碼來判斷,是否為 base64 編碼

php自定義判斷是否為UTF-8的編碼的函數

<?php
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;
}
?>

自定義判斷是否為 base64 編碼的函數

<?php
/**
 * 判斷是否用base64進行encode過
 * 需要使用 is_utf8 來判斷是否為 utf-8的編碼
 * @param $str
 * @return bool
 */
function str_is_base64($str){
   if (is_utf8(base64_decode($str)) && base64_decode($str) != '') {
        return true;
    }
    return false;
}
?>

小提示:在網上看到有人在使用這個方法之前,需要先過濾掉純數字或純字母,個人感覺其實沒有必要,純數字或純字母,都可以通過這個判斷出來!當然你也可以自己過濾測試一下