1. 程式人生 > >php如何判斷一個字串是不是base64編碼

php如何判斷一個字串是不是base64編碼

   由於以前的資料是沒有經過base64編碼的,後來由於要相容Emoji表情和顏文字,改成base64編碼後再儲存。所以在頁面顯示的時候需要判斷是不是經過base64編碼過的。谷歌了一下,網上比較普遍的方法是先base64_decode,然後base64_encode,再看這個和原字串是不是相等。但是這個方法不能百分之準確的判定。

   function checkStringIsBase64($str){
       return $str == base64_encode(base64_decode($str)) ? true : false;
    }

測試如下圖:

比如$str="QQ14";的時候並不是base64字串,應該返回false,但是實際上返回的是true.


網上還有一種方法,遍歷字串看是不是在base64編碼的字元裡面,

base64有大小寫英文字母,0-9的數字,還加 + / =

如下:

['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '=' ];

但是有些字元本來就是base64編碼的字元中包含的,也會出現判斷不準確的時候。

個人解決辦法:

也沒有找到其他更好的方法,暫時只能從資料來源頭來解決統一資料或者標記資料,來是不是base64編碼的過的字串。

1.刷資料,把以前的資料刷成base64,這樣子資料統一了。在讀取的時候不要判斷了,直接base64_decode就好了

2.是在base64編碼轉換的時候,在儲存的時候加一個字首如“base64,”(字首不要使用base64的組成的字元),標記這個是base64編碼字元。我們讀取的時候,只要判斷有沒有這個字首,原來資料直接輸出,base64的字元,直接base64_decode就好了