【发布时间】:2012-07-19 14:36:23
【问题描述】:
我在这个字符串上使用 PHP 的 base64_decode:
Dg+to8RaC3VzAGRThP7iiXe0f5bgp7xmcQoqaAJxggs=
它应该返回 32 字节的数据。 但不知何故,我最终得到了一个只有 31 个字节长的字符串。
这就是我正在做的:
$data = base64_decode($data);
if($data == FALSE)
{
die("decode faild");
}
问题在于解码实际上会起作用。但它只返回 31 个字节。
当我这样做时:$len = strlen($data);
那么$len 将包含 31 个字符而不是 32 个。
使用以下字符串(奇怪):
az8XFgxw/ODAr3EDElvgab/axINKVMDCrw5u51gn6bo=
在解码之前我已经在base64 和urldecode 之后尝试了urlencode,但结果完全一样(它有效但省略了一个字节)
我错过了什么?
编辑:我打印出所有字节。它真的省略了最后一个字节! 0x0B(最后一个字节)丢失,但其他字节在那里。
编辑 2: 额外的测试产生:
1.当我将base64字符串直接嵌入到PHP文件中时,它总是有效的。
2. 当我从$_GET 变量中获取base64 字符串时,有时它不起作用。
$_GET 坏了吗?
【问题讨论】:
-
好像是32 bytes for me。
-
如果您在
base64_encode之前使用不可打印字符,您完全需要对$_GET参数进行urlencode。 -
好的,谢谢。 @nickb:是的,它是 32 字节,但在我的 PHP 脚本中,它返回了一个 31 字节长的字符串。 Ah 和 urldecode 不应该使用,因为脚本会以某种方式自动解码该值。 (再次应用 urldecode 会以某种方式再次触发错误)