字符串 base64_encode/decode 失败?

string base64_encode/decode fails?

我有这个脚本:

    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

可能是什么不同导致它 return 错误?

您正在使用 $strict 参数解码值,这意味着不需要正则表达式(如果字符串中存在无效字符,解码将简单地失败)。

也不需要对解码后的字符串进行编码。如果编码字符串被成功解码则它是有效的;再次对其进行编码不会改变任何内容的有效性。

这样的事情应该足以验证 base64 编码的字符串:

function is_base64($s) {
    return ! (base64_decode($s, true) === false);
}

它只是对值进行解码,然后 returns 无论成功还是失败。