页面URL传递中文乱码
參考:
關于URL編碼
##1.URL中文編碼亂碼原因
以下這段話引自網絡標準RFC 1738以及關于URL編碼
“…Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”
“只有字母和數字[0-9a-zA-Z]、一些特殊符號”$-_.+!*’(),"[不包括雙引號]、以及某些保留字,才可以不經過編碼直接用于URL。"
這意味著,如果URL中有漢字,就必須編碼后使用。但是麻煩的是,RFC 1738沒有規定具體的編碼方法,而是交給應用程序(瀏覽器)自己決定。這導致"URL編碼"成為了一個混亂的領域。
通過解讀關于URL編碼,總結有以下幾種URL編碼情況
##2.解決方案
URL可以不經編碼的字符有:
總結有以下幾種方案。
###2.1.Javascript函數:escape() [已驗證]
result:
http%3A//www.baidu.com/%u6625%u8282 http://www.baidu.com/春節###2.2.Javascript函數:encodeURI() [已驗證]
encodeURI()是Javascript中真正用來對URL編碼的函數。
result:
http://www.baidu.com/%E6%98%A5%E8%8A%82 http://www.baidu.com/春節###2.3.Javascript函數:encodeURIComponent() [已驗證]
encodeURIComponent()用于對URL的組成部分進行個別編碼,而不用于對整個URL進行編碼。
result:
http%3A%2F%2Fwww.baidu.com%2F%E6%98%A5%E8%8A%82 http://www.baidu.com/春節###2.4.java.net.URLEncoder和java.net.URLDncoder [未驗證]
HTML 格式編碼的實用工具類。該類包含了將 String 轉換為 application/x-www-form-urlencoded MIME 格式的靜態方法。
對 String 編碼時,使用以下規則:
- 字母數字字符 “a” 到 “z”、“A” 到 “Z” 和 “0” 到 “9” 保持不變。
- 特殊字符 “.”、"-"、"*" 和 “_” 保持不變。
- 空格字符 " " 轉換為一個加號 “+”。
- 所有其他字符都是不安全的,因此首先使用一些編碼機制將它們轉換為一個或多個字節。然后每個字節用一個包含 3 個字符的字符串 “%xy” 表示,其中 xy 為該字節的兩位十六進制表示形式。推薦的編碼機制是 UTF-8。但是,出于兼容性考慮,如果未指定一種編碼,則使用相應平臺的默認編碼。
例如,使用 UTF-8 編碼機制,字符串 “The string ü@foo-bar” 將轉換為 “The+string+%C3%BC%40foo-bar”,因為在 UTF-8 中,字符 ü 編碼為兩個字節,C3 (十六進制)和 BC (十六進制),字符 @ 編碼為一個字節 40 (十六進制)。
//編碼 java.net.URLEncoder.encode(URIString, "UTF-8"); //解碼 java.net.URLDecoder.decode(URIString, "UTF-8"); //不推薦使用###2.5.Tomcat/conf/server.xml的URIEncoding [已驗證]
<!-- 這種方式缺點顯而易見,換了服務器就要更改,有時候忘記也是很常見的事情。 --> <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" URIEncoding="UTF-8">###2.6.HttpServletRequestWrapper+Filter [未驗證]
思路:
1. 創建一個類繼承HttpServletRequestWrapper,重寫getParameter、getParameterValues和getParameterMap,對參數進行轉碼。
2. 創建一個過濾器,獲取request對象,調用HttpServletRequestWrapper進行包裝解密。
缺陷:
1.只是對請求參數進行了轉碼,如果請求路徑中有中文,則無法處理。
總結
以上是生活随笔為你收集整理的页面URL传递中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用VPB生成OSG的.ive格式地形方
- 下一篇: linux udt 源码,UDT li