base64编码的字符串可以包含空格吗?

Dou*_*gal 27 php mysql base64 whitespace encoding

base64编码的字符串可能包含空格吗?具体来说,它可以包含字符串末尾的空格吗?

PS.我在考虑整个"MySQL将在VARCHAR字段中存储字符串时修剪尾随空格"这里;-)

Ste*_*rig 20

不,它不能.见Base64编码通过使用允许的字符库base64,这是人物A-Z,a-z,0-9,+/(最后两个可能因实施不同),以及填充字符=(不过这也取决于实现一些实现不使用填充在所有).

  • 是的它可以,它们不属于代码,但在大多数实现中,它们可以添加以保持可读性.大多数解码器都忽略空格. (5认同)
  • 谢谢你们,我的意思是"确实"一个base64字符串包含空格 - 而不是"可以" - 我的错.所以最后它可以但它们无关紧要.:-)我现在明白了 (3认同)
  • 正如[Gavin Jackson](/sf/users/110572171/)中提到的那样,如果你的``base64``字符串中有一个意外的空格,那么它很可能就是URL解析的结果将其从"+"转换为空格.一个简单的``$ str = str_replace('','+',$ str)``在你``base64_decode($ str)``之前会解决它. (3认同)

Gav*_*son 14

它不应该,但它可能会这样做.

有效的base64字符串不应包含空格,因为编码字母表应仅包含AZ az 0-9 + /

但是,如果编码数据恰好包含"+"字符,并且数据在URL中传递,则可能会无意中将其转换为空格.所以你可能会遇到一个假定的base64字符串,在这种情况下它似乎有空格.

如果是这种情况,只需在解码前用加号替换空格.

PS.我在考虑整个"MySQL将在VARCHAR字段中存储字符串时修剪尾随空格"

另外,从MySQL 5.0.3开始,varchar的尾随空格不会被随意剥离

  • 提及'+'/空间问题的+1.刚刚有一个URL提供了Base64字符串,其中+已转换为空格. (3认同)