Java反斜线(\)路径与转义字符的小坑
2019獨角獸企業重金招聘Python工程師標準>>>
1.圖片路徑字段ImagePath,?從數據庫讀出,寫到前臺變量中,?正常(比如:?upload\image\2018\18802-85\17A000800002-1.jpg)
2.由前臺向后臺提交,?getParameter取出則反斜線成了轉義符(字符串變為:?uploadimage88802-85A000800002-1.jpg)
為什么第1步從后臺寫到前臺沒被轉義,而第2步從前臺寫到后臺被轉義?
如何處理?
解答:
從數據庫中取出字符串時Java會自動將其中包含的"\"替換成"\\",這樣寫到前臺時HTML轉義一次成為正確的路徑,?這就是問題一的原因.
當前臺提交表單數據到后臺時會轉義一次,?這導致了問題二.
解決辦法就是在第一次從數據庫讀取路徑時(除了Java自動將"\"替換成"\\"那次)再替換一次
這樣到前臺兩次轉義后仍然可得到正確路徑.
說明: replaceAll()方法是采用正則表達式的規則去匹配的。在regex中"\\"表示一個"\",在java中一個"\"也要用"\\"表示。這樣,前一個"\\"代表regex中的"\",后一個"\\"代表java中的"\",所以字符串轉義一次,正則轉義一次,那么一個斜扛要寫4個,要想使用replaceAll()方法將字符串中的反斜杠(\)替換成(\\),則需要這樣寫:replaceAll("\\\\","\\\\\\\\")
轉載于:https://my.oschina.net/u/344631/blog/1828138
總結
以上是生活随笔為你收集整理的Java反斜线(\)路径与转义字符的小坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【“探探”为例】手把手教你用最少的代码实
- 下一篇: Java5的 线程并发库