为什么base64_decode在无效输入时不返回false?

时间:2011-09-16 16:21:11

标签: php

echo base64_decode("http://www.domain.com/en/messages/list?all=1");

这给出了结果:

†Ыiяь0БЪ&j)ЬўoЮџщћІЖ zПеЉЛZ–]

如何检查string是否为base64_encoded

如果它不是有效的base64编码字符串,它不应该返回false吗?

我有一些urls base64_encoded来自电子邮件和一些简单的网址。

3 个答案:

答案 0 :(得分:2)

对于所有输入,自动检测它们是否打算成为其他东西的base64编码版本在数学上是不可行的。

您显示的输入是有效 base64数据,无论您是否打算以这种方式使用它。

您可以通过将第二个参数设置为TRUE来略微缓解某些事情,以便输入中的非base64字母字符会导致错误。但是你仍然可以输入只有在base64字母表中找到的字符,而这些字符最初并不是按照这种方式解释的。没有一些元数据,根本无法确定。

答案 1 :(得分:0)

尝试base64_decode("http://www.domain.com/en/messages/list?all=1", TRUE);

,TRUE将其置于“严格模式”。这意味着如果字符串包含无效字符,它将返回FALSE

答案 2 :(得分:0)

base64_encode返回false的唯一时间是输入包含不在base64字母表中的字符。

See the wiki on base64 alphabet