base64编码的字符串可能包含空格吗?具体来说,它可以在字符串的 end 中包含空格吗?
PS。我在考虑整个“MySQL将在VARCHAR字段中存储字符串时修剪尾随空格”这里; - )
答案 0 :(得分:21)
不,不能。有关base64
使用的允许字符存储库,请参阅Base64,其中包含字符A-Z
,a-z
,0-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