如何在 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;
}
}
在说 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;
}
}