1

base64_decode在这个字符串上使用 PHP:

Dg+to8RaC3VzAGRThP7iiXe0f5bgp7xmcQoqaAJxggs=

它应该返回 32 个字节的数据。但不知何故,我最终得到了一个只有 31 个字节长的字符串。

这就是我正在做的事情:

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

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

使用以下字符串(奇怪):

az8XFgxw/ODAr3EDElvgab/axINKVMDCrw5u51gn6bo=

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

我错过了什么?


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

编辑 2:附加测试产生: 1. 当我将 base64 字符串直接嵌入到 PHP 文件中时,它总是有效的。2.当我base64从变量中获取字符串时,$_GET它有时不起作用。

$_GET了吗?

4

1 回答 1

4

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

$data = base64_decode(str_replace(' ', '+', $data));
于 2012-07-19T14:49:40.250 回答