字符串base64_encode / decode失败?

时间:2015-01-17 21:33:57

标签: php base64

我有这个脚本:

    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

有什么区别可以让它返回假?

1 个答案:

答案 0 :(得分:2)

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

也不需要对解码后的字符串进行编码。如果编码的字符串被成功解码,那么它是有效的;再次编码不会改变任何东西的有效性。

这样的东西足以验证base64编码的字符串:

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

它只是解码值,然后返回它是成功还是失败。