springMVC自動轉義問題


今天遇到個神奇的問題,前端上傳圖片到文件服務器上,然后將圖片地址傳到后台,后台保存路徑到數據庫中,但是展示的時候路徑一直有問題。

比如前端入參

...../953983fd-576b-44fb-ae11-57b5e78ced73?q-sign-algorithm=sha1&q-ak=AKIDmNksnTjNZeV9Y4qo37UcbS6WhdKtaI8j&q-sign-time=1582808716;1582809616&q-key-time=1582808716;

然后后台返回的卻是

...../953983fd-576b-44fb-ae11-57b5e78ced73?q-sign-algorithm=sha1&q-ak=AKIDmNksnTjNZeV9Y4qo37UcbS6WhdKtaI8j&q-sign-time=1582808716;1582809616&q-key-time=1582808716;

也就是會將&轉義成&

出現這種問題的原因就是springMVC對於特殊字符會進行轉義,例如&---->& 

但是具體的源碼沒有找到在哪,后面有時間再去找一下。。。

解決方法可以有以下幾種:

1、StringEscapeUtils

java中可以使用 org.apache.commons.lang3  包中的  StringEscapeUtils.unescapeHtml4(String str) 方法來進行解碼。

不過會提示這個方法被棄用了,可以使用org.apache.commons.text.StringEscapeUtils,maven依賴如下:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.1</version>
</dependency>
String unescapeHtml4 = StringEscapeUtils.unescapeHtml4(sysAd.getImgPath());

通過這個方法就能將已經被轉義的字符還原回來。

2、base64編碼

前端在傳入參數的時候,可以對參數進行base64的編碼,然后再傳入到后端,然后拿到后端返回數據的時候,進行base64的解碼。

引入js文件:

<script src="js/jquery-3.2.1.min.js" type="text/javascript"></script>
<script src="js/jquery.base64.js" type="text/javascript"></script>

使用方法:

//對 123321 進行加密
var str = $.base64.encode('123321');
alert(str);
            
//對 str 進行解密
var dstr = $.base64.decode(str);
alert(dstr)

3、urlEncode與urlDecode

這個原理也是一樣的,因為我這邊的入參是圖片地址,是一個url,因此可以使用這種方式進行encode與decode

編碼

var str  = encodeURIComponent('中文');

解碼

var str  = decodeURIComponent(UrlEncode);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM