一个base64编码的字符串可能包含空格吗?特别是,它可能在字符串末尾包含空格吗?
附注:我在思考整个“MySQL在将字符串存储在VARCHAR字段中时会修剪尾随空格”的问题;-)
一个base64编码的字符串可能包含空格吗?特别是,它可能在字符串末尾包含空格吗?
附注:我在思考整个“MySQL在将字符串存储在VARCHAR字段中时会修剪尾随空格”的问题;-)
不可以。请参阅Base64,了解base64
所使用的字符库,包括字符A-Z
、a-z
、0-9
、+
和/
(最后两个字符可能因实现而异),以及填充字符=
(但这也取决于不同的实现方式)。
VARCHAR
列中存储base64
编码的字符串,这是绝对安全的。 - Stefan Gehrigbase64
字符串中有意外的空格,那么很可能是由于 URL 解析将其从 +
转换成了空格。在进行 base64_decode($str)
之前,简单地使用 $str = str_replace(' ', '+', $str)
将其替换即可解决问题。 - Egg这不应该发生,但有可能会发生。
一个有效的base64字符串不应包含空格,因为编码字母表只应由A-Z a-z 0-9 + /组成。
然而,如果编码数据恰好包含“+”字符,并且数据被传递到URL中,则它可能会意外地转换为空格。在这些情况下,您可能会遇到一个看起来有空格的所谓base64字符串。
如果是这种情况,只需在解码之前将空格替换为加号即可。
附带说一句,“MySQL在将字符串存储在VARCHAR字段中时会修剪尾随的空格”
顺便提一下,在MySQL 5.0.3中,varchar的尾随空格将不会轻易删除。
是的。Base64编码的字符串可以包含空格,但字符不重要。因此,如果数据库修剪空格,那就没问题。
事实上,最初的MIME规范建议将Base64字符串分成每行72个字符。XML的base64Binary也可以包括换行符、制表符和空格。
在PHP中,base64_decode()
会删除所有空白字符,因此您不必担心这个问题。
维基百科建议,Base64编码有无数种变体:
http://en.wikipedia.org/wiki/Base64
所以答案可能取决于您需要对字符串执行什么操作。但我敢说您是使用base64_encode()在PHP中创建的,因此在其后添加空格似乎是安全的:
<?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'
?>
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