繁体   English   中英

如何在 PHP 上检测真正的 base64

[英]How to detect true base64 on PHP

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

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

echo base64_decode("hey guys");

将返回(在 latin1 中)

 ì »+

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

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

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

  • 查找非 ASCII 字符(AZ、az、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;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM