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

时间:2010-06-22 09:56:22

标签: php mysql encoding whitespace base64

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

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

6 个答案:

答案 0 :(得分:21)

不,不能。有关base64使用的允许字符存储库,请参阅Base64,其中包含字符A-Za-z0-9+和{{1} (最后两个可能因实现而异)以及填充字符/(但这也取决于实现,因为某些实现根本不使用填充)。

答案 1 :(得分:13)

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

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

但是,如果编码数据恰好包含' +'字符,并且数据在URL中传递,它可以无意中转换为空格。因此,在这种情况下,您可能会遇到一个假定的base64字符串,其中包含空格。

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

  

PS。我正在思考整个"当在VARCHAR字段中存储字符串时,MySQL将修剪尾随空格"这里

顺便说一句,从MySQL 5.0.3开始,varchar的尾随空格不会被随便剥离

答案 2 :(得分:3)

是。 Base64编码的字符串可以包含空格,但字符不重要。如果数据库修剪空格,那就没关系。

事实上,原始的MIME规范建议将Base64字符串分成72个字符的行。 base64Binary的XML也可能包括换行符,制表符,空格。

在PHP中,base64_decode()会删除所有空格字符,因此您不必担心它。

答案 3 :(得分:1)

维基百科表明,Base64编码的变化很多:

http://en.wikipedia.org/wiki/Base64

所以答案可能取决于你需要对字符串做什么。但是我敢说你用PHP创建了base64_encode()所以它似乎可以安全地追加空白:

<?php

$original_data = 'Lorem ipsum dolor sit amet';
$encoded_data = base64_encode($original_data);
$padded_data = '    ' . chunk_split($encoded_data, 3, '  ') . '    ';

echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet'

?>

答案 4 :(得分:0)

据我所知,它不能。基本上,Base64字符串必须由一组64个字符构成。 A-Z,a-z,0-9表示62 - 另外两个依赖于实现。

根据我的了解,现在有一个将空格用作字符的实现。主要原因是可读性 - 即必须容易打印和识别Base64字符串。

您可能会在Wikipedia上找到有关它的更多信息。

答案 5 :(得分:0)

否,但是-base64实用程序的某些实现将在输出中添加换行符,这会使它看起来好像空白是输出的一部分。如果遇到这种情况,请根据您的base64版本,通过执行以下操作之一来关闭此行为或删除换行符:

base64 -w 0 < input.txt
base64 < input | tr -d \\n

有关详情,请参阅此问题:https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334