Pot*_*ert 100
我意识到这是一个古老的话题,但使用严格的参数并不一定会有所帮助.
在诸如"我不是base 64编码"之类的字符串上运行base64_decode将不会返回false.
但是,如果您尝试使用strict对字符串进行解码并使用base64_encode对其进行重新编码,则可以将结果与原始数据进行比较,以确定它是否是有效的bas64编码值:
if ( base64_encode(base64_decode($data, true)) === $data){
echo '$data is valid';
} else {
echo '$data is NOT valid';
}
Run Code Online (Sandbox Code Playgroud)
Veg*_*ega 20
你可以使用这个功能:
function is_base64($s)
{
return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s);
}
Run Code Online (Sandbox Code Playgroud)
Edo*_*odo 10
此代码应该有效,因为如果字符串无效,则decode函数返回FALSE:
if (base64_decode($mystring, true)) {
// is valid
} else {
// not valid
}
Run Code Online (Sandbox Code Playgroud)
您可以在文档中阅读有关base64_decode函数的更多信息.
我认为唯一的方法是base64_decode()
使用$strict
参数设置为true
,并查看它是否返回false
.
仅对于字符串,您可以使用此函数,该函数在返回true之前检查几个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;
}
Run Code Online (Sandbox Code Playgroud)
Wim*_*Wim -1
您可以直接发送字符串base64_decode
($strict 设置为 TRUE),如果输入无效,它将返回 FALSE。
您还可以使用 fi 正则表达式查看字符串是否包含 base64 字母表之外的任何字符,并检查它是否在末尾包含正确数量的填充(=
字符)。但仅使用 base64_decode 就容易得多,并且不应该存在格式错误的字符串造成任何损害的风险。