base64_decode省略了一个字节


base64_decode omits one byte

我在这个字符串上使用PHP的base64_decode

Dg+to8RaC3VzAGRThP7iiXe0f5bgp7xmcQoqaAJxggs=

并且它应该返回32字节的数据。但不知怎么的,我得到了一个只有31字节长的字符串。

这就是我正在做的:

$data = base64_decode($data);
if($data == FALSE)
{
    die("decode faild");
}

问题是解码实际上会起作用。但它只返回31个字节。当我这样做时:$len = strlen($data);则CCD_ 3将包含31个字符而不是32个字符。

有了以下字符串,它(奇怪地)工作:

az8XFgxw/ODAr3EDElvgab/axINKVMDCrw5u51gn6bo=

在解码之前,我已经在base64urldecode之后尝试了urlencode,但结果完全相同(它有效,但省略了一个字节)

我缺少什么


编辑:我打印出了所有字节。它真的省略了最后一个字节!0x0B(最后一个字节)丢失,但其他字节仍在。

第2版:额外的测试结果如下:1.当我将base64字符串直接嵌入到PHP文件中时,它总是有效的。2.当我从$_GET变量中获得base64字符串时,它有时不起作用。

$_GET坏了吗?

这是+,我的朋友,它被解释为(空格)。因此,在将数据附加到URL之前使用url_decode(),然后在脚本中使用+,或者简单地用CCD_15替换空格。

$data = base64_decode(str_replace(' ', '+', $data));