如何在 PHP 上检测真正的 base64

How to detect true base64 on PHP

在说 DUPLICATE 之前,我在 SO 中找不到关于我的具体问题的正确答案。

我知道如何使用 base64_decode()。我的问题是我需要检查一个字符串是否是 base64 来解码它,如果不是,什么都不做。问题是一些像 "hey guys" 这样的英文字符串是 base64 有效的,但是 return 纯粹是废话。

echo base64_decode("hey guys");

将 return(在 latin1 中)

 ì »+

这不是我想要的,我有一个脚本循环遍历数据库中的字符串,检查 base64 并将其转换。问题是,第一次需要 "aGV5IGd1eXM=" 并将其转换为 "hey guys" 并将重做为 "ì »+"

如何检查它是否是真正的 base64?有什么办法吗?

因为 base64 是从 8 位到 6 位数据表示的映射。您只有以下选项:

  • 寻找 non-ASCII 个字符(A-Z、a-z、0-9、+、/ 以外的字符)和填充
  • 求字符数(必须能被三整除)

通过这种方式,您可以检查数据是否不是base64编码的。但是你无法检查数据是否是真正的base64,因为它可以是通过base64编码要求的普通字符串。

另一方面,如果您知道数据的结构,则可以检查 base64 文本的解码是否符合该结构。

试试这个:

function base64_check($name){
 $encoding_type = mb_detect_encoding(base64_decode($name));
  if($encoding_type == "ASCII" || $encoding_type == "UTF-8"){
     return true;
  }else{
     return false;
  }
}