RFC 1738規定:"只有字母和數字[0-9a-zA-Z]、一些特殊符號"$-_.+!*'(),"[不包括雙引號]、以及某些保留字,才能夠不通過編碼直接用於URL。"chrome
http://[username:password@]www.host.com[/contextPath]/servletPath/pathInfo?name=中國
contextPath上下文路徑,若是部署在根目錄下,則省略上下文路徑。瀏覽器
網址路徑中包含漢字、查詢字符串包含漢字、在已打開的網頁上,直接用Get或Post方法發出HTTP請求、Ajax調用的URL包含漢字
例如:http://localhost/上下文路徑/servlet路徑/路徑信息?name=中國
服務器
Request URL: http://localhost/**%E4%B8%8A%E4%B8%8B%E6%96%87%E8%B7%AF%E5%BE%84**/*servlet%E8%B7%AF%E5%BE%84*/**%E8%B7%AF%E5%BE%84%E4%BF%A1%E6%81%AF**?name=*%E4%B8%AD%E5%9B%BD*
函數
方法 | 名稱 | 原始值 | 瀏覽器編碼後 | 服務器是否解碼 | 解碼後 |
---|---|---|---|---|---|
getContextPath() | contextPath | 上下文路徑 | %E4%B8%8A%E4%B8%8B%E6%96%87%E8%B7%AF%E5%BE%84 | 否 | |
getServletPath() | servletPath | servlet路徑 | servlet%E8%B7%AF%E5%BE%84 | 是 | /servlet路徑 |
getPathInfo() | pathInfo | 路徑信息 | %E8%B7%AF%E5%BE%84%E4%BF%A1%E6%81%AF | 是 | /路徑信息 |
getQueryString() | queryString | name=中國 | name=%E4%B8%AD%E5%9B%BD | 是 | name=中國 |
經Firefox 和chrome 測試,中文字符瀏覽器採用UTF-8編碼並加%。測試
escape()不能直接用於URL編碼,它的真正做用是返回一個字符的Unicode編碼值。除了ASCII字母、數字、標點符號"@ * _ + - . /"之外,對其餘全部字符進行編碼。在\u0000到\u00ff之間的符號被轉成%xx的形式,其他符號被轉成%uxxxx的形式。對應的解碼函數是unescape()。編碼
encodeURI()是Javascript中真正用來對URL編碼的函數。
它着眼於對整個URL進行編碼,所以除了常見的符號之外,對其餘一些在網址中有特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼。編碼後,它輸出符號的utf-8形式,而且在每一個字節前加上%code