最近遇到protobuffer資料轉換的base64字串在發到後端出現異常的問題,調查了一下發現base64裡的+號發過去變成了空格,進一步查詢發現是由於我們的資料是附在url,實際上是url轉換造成的,其實我們應該對parameter做轉碼處理,再通過url傳送才不會出現這樣的問題。
例如下面的字串:
abcdefgabcdefg+=
在瀏覽器中:
檢視原來view source
瀏覽器轉換後 view parsed
view encoded
view decoded
可以看到經過encoded decoded後+號就變成空格了。
查詢了一些解決方法,前端可以通過對url進行編碼解決,具體可以通過直接正則匹配+號等替換成%2b,也可以呼叫encodeuricomponent這個函式。
encodeuricomponent
返回值uristring 的副本,其中的某些字元將被十六進製制的轉義序列進行替換。
說明該方法不會對 ascii 字母和數字進行編碼,也不會對這些 ascii 標點符號進行編碼: - _ . ! ~ * 』 ( ) 。
其他字元(比如 :;/? : @&=+$,# 這些用於分隔 uri 元件的標點符號),都是由乙個或多個十六進製制的轉義序列替換的。
abcdefgabcdefg%2b%3d
另乙個encodeuri其實不會處理+:
encodeuri
返回值uristring 的副本,其中的某些字元將被十六進製制的轉義序列進行替換。
說明該方法不會對 ascii 字母和數字進行編碼,也不會對這些 ascii 標點符號進行編碼: - _ . ! ~ * 』 ( ) 。
該方法的目的是對 uri 進行完整的編碼,因此對以下在 uri 中具有特殊含義的 ascii 標點符號,encodeuri() 函式是不會進行轉義的:;/? : @ &=+$,#
abcdefgabcdefg+=
轉換後+變成%2b, =變成%3d。
在瀏覽器中傳輸結果如下,可以看到最終解碼得到正確的字串:
URl 傳參時 號變成空格
前端用base64加密後的資料,傳遞到後台時發現乙個問題 比如 韓飛 這個名字,base64加密後的字串為 6z p6aoe但是後端接受到引數為 6z p6aoe 號變成了空格,導致後台解密的時候出現異常。解決辦法如下 1 修改客戶端,將客戶端帶 的引數中的 全部替換為 2b 這樣引數傳到伺服器端時...
URl 傳參時 號變成空格
1,url傳參中加號變空格的解決方案 url傳參加號變空格的問題,在頁面中把 號替換為 2b 可以得到解決 str str.replace 2b 說明 和2之間是沒有空格的,因為在網頁上顯示時,會被轉義為 號,所以本人加了個空格,實際應用中是沒有的。希望能解決您的問題。2,遇到的問題 當上傳檔案的檔...
http請求引數
http請求中不同的請求方式和設定不同的content type時,傳遞引數的方式會不一樣,引數的三種形式 query string parameters form data request payload get請求會出現query string parameters請求體 get請求時,引數會以...