我有这个脚本:
function is_base64($s){
// Check if there are valid base64 characters
if (!preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s)) return false;
// Decode the string in strict mode and check the results
$decoded = base64_decode($s, true);
if(false === $decoded) return false;
// Encode the string again
if(base64_encode($decoded) != $s) return false;
return true;
}
由is_base64($input)
其中$input
是两个字符串,我尝试对该函数进行测试。
报告确定:!!K0deord*test
报告不正常:Kilroy2P4All
有什么区别可以让它返回假?
答案 0 :(得分:2)
您正在使用$strict
参数对值进行解码,这意味着不需要正则表达式(如果字符串中存在无效字符,则解码将失败)。
也不需要对解码后的字符串进行编码。如果编码的字符串被成功解码,那么它是有效的;再次编码不会改变任何东西的有效性。
这样的东西足以验证base64编码的字符串:
function is_base64($s) {
return ! (base64_decode($s, true) === false);
}
它只是解码值,然后返回它是成功还是失败。