我在这个字符串上使用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=
在解码之前,我已经在base64
和urldecode
之后尝试了urlencode
,但结果完全相同(它有效,但省略了一个字节)
我缺少什么
编辑:我打印出了所有字节。它真的省略了最后一个字节!0x0B
(最后一个字节)丢失,但其他字节仍在。
第2版:额外的测试结果如下:1.当我将base64字符串直接嵌入到PHP文件中时,它总是有效的。2.当我从$_GET
变量中获得base64
字符串时,它有时不起作用。
$_GET
坏了吗?
这是+
,我的朋友,它被解释为(空格)。因此,在将数据附加到URL之前使用
url_decode()
,然后在脚本中使用+
,或者简单地用CCD_15替换空格。
$data = base64_decode(str_replace(' ', '+', $data));