1.圖片路徑字段ImagePath, 從數據庫讀出,寫到前臺變量中, 正常(好比: upload\image\2018\18802-85\17A000800002-1.jpg)
2.由前臺向後臺提交, getParameter取出則反斜線成了轉義符(字符串變爲: uploadimage88802-85A000800002-1.jpg)
爲何第1步從後臺寫到前臺沒被轉義,而第2步從前臺寫到後臺被轉義?
如何處理?java
解答:正則表達式
從數據庫中取出字符串時Java會自動將其中包含的"\"替換成"\\",這樣寫到前臺時HTML轉義一次成爲正確的路徑, 這就是問題一的緣由.
當前臺提交表單數據到後臺時會轉義一次, 這致使了問題二.
解決辦法就是在第一次從數據庫讀取路徑時(除了Java自動將"\"替換成"\\"那次)再替換一次
這樣到前臺兩次轉義後仍然可獲得正確路徑.數據庫
說明: replaceAll()方法是採用正則表達式的規則去匹配的。在regex中"\\"表示一個"\",在java中一個"\"也要用"\\"表示。這樣,前一個"\\"表明regex中的"\",後一個"\\"表明java中的"\",因此字符串轉義一次,正則轉義一次,那麼一個斜扛要寫4個,要想使用replaceAll()方法將字符串中的反斜槓(\)替換成(\\),則須要這樣寫:replaceAll("\\\\","\\\\\\\\")spa