iT邦幫忙

0

base64 decode後出現�符號

小弟在js中var變數放base64編碼的字串
某些base64的編碼decode後尾巴會出現�的符號

但在網頁中很多地方都call這個變數,但是卻不是所有同樣的變數都會出現這個符號

請各位前輩解惑

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 5 級 ‧ 2017-11-02 00:36:51 檢舉
給個能重現問題的範例
我只猜得到長度錯誤差半格的中文字...
阿貓 iT邦新手 5 級 ‧ 2017-11-02 10:27:29 檢舉
我有發現是因為後面的=號消失了。
pS55oiQIC4uLiDljrvjgIw=
最後的=號
如果你 HTTP 是用 get 的方式傳這個參數
或許可以考慮給他 URLEncode 一下再傳
阿貓 iT邦新手 5 級 ‧ 2017-11-02 11:08:12 檢舉
有,我有做URLEncode。

1 個回答

1
timloo
iT邦研究生 2 級 ‧ 2017-11-02 10:08:24

我搜尋了一下關鍵字,base64 decode tail
stackoverflow有一個159分的回答

這些結尾的等號(=),最多一個或兩個,也可能不是等號(=)結尾(足碼了,不用補等號),都是為了湊位數,補上的,基本上結尾的等號(=)都不是編碼前的內容。應該不會影響資料的完整性。
所以直接去掉應該沒關係。所以沒傳到後端也沒關係。

這好像比較像上個問題**=**的參考。

前端,你js decode是用那個函式庫呢? 第三方庫很多,會不會是實作上的問題?

阿貓 iT邦新手 5 級 ‧ 2017-11-02 10:26:12 檢舉

恩恩 是不會影響到原本的資料沒錯
但是後面會多一個怪符號,感覺這就不太正常。
有些時候會影響功能,譬如把檔名解回去放到a的src時,就會造成檔名錯了,無法下載。
我用的函式:https://drive.google.com/open?id=0BxCraRiZ8Q4JYWdnX2JZYkN5bmM
我一直在抓這個問題出在哪裡,所以從http request開始找,因為我發現php收到沒有=號的資料寫進資料庫,在撈出來decode後會因為那個等號不見了出現�符號。我手動進資料庫把=補回去,前端就會顯示正常。

timloo iT邦研究生 2 級 ‧ 2017-11-02 11:09:13 檢舉

你用的web server 不是apache,是那牌的web server呢?
有點好奇!!
base64 沒有壓縮(反而還膨脹、變大),保密(一碼對一碼的轉換)的功能。就是 binary-to-text 。

我前陣子遇到的例子,是把圖檔,jpg/png,文件掃描檔,pdf ,這些二進位檔用base64 轉成一堆文字。透過soap web service資料交換。

只是"檔名",需要base64嗎? 我遇到的例子,檔名還是用原來的檔名,沒有轉,二進位內容再base64轉就好。要讀取內容時,解碼後再另存新檔。

我要發表回答

立即登入回答