字符串 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 无论成功还是失败。
我有这个脚本:
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 无论成功还是失败。