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