2010-06-22 270 views
23

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

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

+0

P'raps我的意思是“做”超过“可以”;-) – Dougal 2010-06-22 16:07:46

+0

以及你可以添加空白取决于实施,但主要是他们只会被剥夺,因为他们实际上是有效的,因为他们不是B64“字母表的一部分“但通常包含在显示目的中,”可读性“实际上并没有达到它的目的,因为”正常“人类首先读取b64字符串 – My1 2016-02-23 10:17:34

回答

19

不,它不能。见Base64base64使用允许的字符库,这是人物A-Za-z0-9+/(最后两个可能因实施不同),以及填充字符=(不过这也取决于实现一些实现根本不使用填充)。

+4

是的,它可以,它们不属于代码,但在大多数实现中,它们可以添加保持可读性TY。大多数解码器忽略空格。 – jigfox 2010-06-22 10:18:18

+0

是的,这是真的,但它们对编码字符串并不重要,这意味着它们可以安全地被忽略,如果MySQL或谁将它们剥离它们都没有关系。 OP的意图显然是将'base64'编码的字符串存储在绝对保存的MySQL'VARCHAR'列中。 – 2010-06-22 10:51:40

+3

谢谢你们,我的意思是“不”,一个base64字符串包含空格 - 不是“可以” - 我的错。所以总而言之,它可以,但它们是无关紧要的。 :-)我现在得到它 – Dougal 2010-06-22 16:09:15

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' 

?> 
+0

我想是一种证明它的迂回方式!谢谢 – Dougal 2010-06-22 10:16:18

0

据我所知,它不能。基本上,一个Base64字符串必须由一组64个字符构成。 A-Z,A-Z,0-9使62 - 另外两个取决于实施。

基于我所知道的,现在有一个实现将使用空白作为字符。主要原因是可读性 - 即Base64字符串必须易于打印和识别。

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

+0

有用和有趣。谢谢 – Dougal 2010-06-22 10:16:37

3

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

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

在PHP中,base64_decode()去除所有whiltespace字符,所以你不必担心它。

12

它不应该,但它可能会。

有效的base64字符串不应当包含空格由于编码字母表应仅由AZ的AZ 0-9 +/

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

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

PS。“在VARCHAR字段存储字符串时,MySQL将修剪尾随空白”这里

顺便说一句,我想对整个,一个varchar的尾部空格将不会被随便剥夺像MySQL 5.0.3

+0

但是,如果您使用URL安全的Base64编码算法,这应该不是问题:) – Ren 2012-10-31 15:24:25

+3

提及“+”/空间问题。刚刚有一个URL提供Base64字符串,并将+转换为空格。 – 2014-01-14 16:12:04

+0

我正在为这个疯狂。谢谢! – 2017-03-02 18:55:15