2010-06-22 129 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

相關問題