天天看点

浏览器URL编码 浏览器URL编码

娴忚鍣║RL缂栫爜

jsp椤甸潰涓€氳繃璇锋眰鍙︿竴涓〉闈㈠苟閫氳繃url浼犻€掍簡甯︽湁涓枃鐨勫弬鏁帮紝缁撴灉鍦ㄦ帴鏀剁鑾峰彇鍙傛暟鏃朵贡鐮佷簡

缁忔鏌ヤ贡鐮佺幇璞℃寚鍑烘柊鍦↖E娴忚鍣ㄤ腑锛屽叾浠栨祻瑙堝櫒鐏嫄銆乧hrome绛変笉浼氭湁闂

鏈€鍚庣殑瑙e喅鏂瑰紡鏄細

鎵嬪姩灏嗘涓枃杩涜缂栫爜锛歟ncodeURI(url)鍗冲彲

鍏堟潵鐪嬬湅涓変釜url锛?

  • url1. http://hi.baidu.com/鐖卞疂鐨勫
  • url2. http://hi.baidu.com/%E7%88%B1%E5%AE%9D%E7%9A%84%E5%A6%8D (UTF-8 缂栫爜)
  • url3. http://hi.baidu.com/%B0%AE%B1%A6%B5%C4%E5%FB (GBK 缂栫爜)

杩欎笁涓猽rl鎸囧悜鍚屼竴涓綉椤碉紝鑰屼笖閮借兘澶熻闂€傚叾瀹烇紝濡傛灉浣犵殑娴忚鍣ㄦ槸涓枃鐜涓嬬殑锛孖E璁剧疆鈥滀互UTF8鍙戦€乁RL鈥濓紝閭d箞鍦↖E閲岃緭鍏rl1锛屾湇鍔″櫒绔緱鍒扮殑鏄痷rl2锛涘湪firefox閲岃緭鍏rl1锛屾湇鍔″櫒绔緱鍒扮殑鏄痷rl3銆傝繖鏄负浠€涔堝憿锛熷惉涓嬫枃鍒嗚В(鍒嗘瀽閮ㄥ垎鍐呭杞嚜http://blog.csdn.net/yzhz/archive/2007/07/03/1676796.aspx)銆?

涓€銆侀棶棰橈細

缂栫爜闂鏄疛AVA鍒濆鑰呭湪web寮€鍙戣繃绋嬩腑缁忓父浼氶亣鍒伴棶棰橈紝缃戜笂涔熸湁澶ч噺鐩稿叧鐨勬枃绔犱粙缁嶏紝浣嗗叾涓緢澶氭枃绔犲苟娌℃湁瀵筓RL涓娇鐢ㄤ簡涓枃绛夐潪ASCII鐨勫瓧绗﹂€犳垚鏈嶅姟鍣ㄥ悗鍙扮▼搴忚В鏋愬嚭鐜颁贡鐮佺殑闂浣滃嚭鍑嗙‘鐨勮В閲婂拰璇存槑銆傛湰鏂囧皢璇︾粏浠嬬粛鐢变簬鍦║RL涓娇鐢ㄤ簡涓枃绛夐潪ASCII鐨勫瓧绗﹂€犳垚涔辩爜鐨勯棶棰樸€?

1銆佸湪URL涓腑鏂囧瓧绗﹂€氬父鍑虹幇鍦ㄤ互涓嬩袱涓湴鏂癸細

(1)銆丵uery String涓殑鍙傛暟鍊硷紝姣斿http://search.china.alibaba.com/search/offer_search.htm?keywords=涓浗

(2)銆乻ervlet path锛屾瘮濡傦細http://search.china.alibaba.com/selloffer/涓浗.html

2銆佸嚭鐜颁贡鐮侀棶棰樼殑鍘熷洜涓昏鏄互涓嬪嚑鏂归潰锛? (1)銆佹祻瑙堝櫒锛氭垜浠殑瀹㈡埛绔紙娴忚鍣級鏈韩骞舵病鏈夐伒寰猆RI缂栫爜鐨勮鑼冿紙http://www.w3.org/International/O-URL-code.html锛夈€? (2)銆丼ervlet鏈嶅姟鍣細Servlet鏈嶅姟鍣ㄧ殑娌℃湁姝g‘閰嶇疆銆? (3)銆佸紑鍙戜汉鍛樺苟涓嶄簡瑙ervlet鐨勮鑼冨拰API鐨勫惈涔夈€?

浜屻€佸熀纭€鐭ヨ瘑锛? 1銆佷竴涓猦ttp璇锋眰缁忚繃鐨勫嚑涓幆鑺傦細

娴忚鍣?ie firefox)銆恎et/post銆?----------->Servlet鏈嶅姟鍣?------------------------------>娴忚鍣ㄦ樉绀? 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 缂栫爜聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 瑙g爜鎴恥nicode锛岀劧鍚庡皢鏄剧ず鐨勫唴瀹圭紪鐮伮犅犅犅犅犅犅犅犅?瑙g爜

(1) 娴忚鍣ㄦ妸URL(浠ュ強post鎻愪氦鐨勫唴瀹?缁忚繃缂栫爜鍚庡彂閫佺粰鏈嶅姟鍣ㄣ€? (2) 杩欓噷鐨凷ervlet鏈嶅姟鍣ㄥ疄闄呬笂鎸囩殑鏄敱Servlet鏈嶅姟鍣ㄦ彁渚涚殑servlet瀹炵幇ServletRequestWrapper锛屼笉鍚屽簲鐢ㄦ湇鍔″櫒鐨剆ervlet瀹炵幇涓嶅悓锛岃繖浜泂ervlet鐨勫疄鐜版妸杩欎簺鍐呭瑙g爜杞崲涓簎nicode锛屽鐞嗗畬姣曞悗锛岀劧鍚庡啀鎶婄粨鏋?鍗崇綉椤?缂栫爜杩斿洖缁欐祻瑙堝櫒銆? (3) 娴忚鍣ㄦ寜鐓ф寚瀹氱殑缂栫爜鏄剧ず璇ョ綉椤点€傚綋瀵瑰瓧绗︿覆杩涜缂栫爜鍜岃В鐮佺殑鏃跺€欓兘娑夊強鍒板瓧绗﹂泦锛岄€氬父浣跨敤鐨勫瓧绗﹂泦涓篒SO8859-1銆丟BK銆乁TF-8銆乁NICODE銆?

2銆乁RL鐨勭粍鎴?

鍩熷悕:绔彛/contextPath/servletPath/pathInfo?queryString

璇存槑锛?

1銆丆ontextPath鏄湪Servlet鏈嶅姟鍣ㄧ殑閰嶇疆鏂囦欢涓寚瀹氱殑銆? 瀵逛簬weblogic锛? contextPath鏄湪搴旂敤鐨剋eblogic.xml涓厤缃€? <context-root>/</context-root>

瀵逛簬tomcat锛? contextPath鏄湪server.xml涓厤缃€? <Context path="/" docBase="D:/server/blog.war" debug="5" reloadable="true" crossContext="true"/>

瀵逛簬jboos锛? contextPath鏄湪搴旂敤鐨刯boss-web.xml涓厤缃€?

[html]聽 view plain copy print ? 聽

  1. <span聽style="font-size:12px;"><jboss-web>聽聽
  2. 聽聽聽聽聽聽<context-root>/</context-root>聽聽
  3. </jboss-web></span>聽聽

2銆丼ervletPath鏄湪搴旂敤鐨剋eb.xml涓厤缃€?

[html]聽 view plain copy print ? 聽

  1. <span聽style="font-size:12px;"><servlet-mapping>聽聽
  2. 聽聽聽聽聽聽<servlet-name>Example</servlet-name>聽聽
  3. 聽聽聽聽聽聽<url-pattern>/example/*</url-pattern>聽聽
  4. </servlet-mapping></span>聽聽

2銆丼ervlet API

鎴戜滑浣跨敤浠ヤ笅servlet API鑾峰緱URL鐨勫€煎強鍙傛暟銆?

[java]聽 view plain copy print ? 聽

  1. <span聽style="font-size:12px;">request.getParameter("name");聽聽聽聽聽聽聽聽聽聽聽//聽鑾峰緱queryString鐨勫弬鏁板€?鏉ヨ嚜浜巊et鍜宲ost)锛屽叾鍊肩粡杩嘢ervlet鏈嶅姟鍣║RL聽Decode杩囩殑聽聽
  2. request.getPathInfo();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//聽娉ㄦ剰锛歱athinfo杩斿洖鐨勫瓧绗︿覆鏄粡杩嘢ervlet鏈嶅姟鍣║RL聽Decode杩囩殑銆偮犅?
  3. requestURI聽=聽request.getRequestURI();聽//聽鍐呭涓猴細contextPath/servletPath/pathinfo聽娴忚鍣ㄦ彁浜よ繃鏉ョ殑鍘熷鏁版嵁锛屾湭琚玈ervlet鏈嶅姟鍣║RL聽Decode杩囥€?lt;/span>聽聽

3銆佸紑鍙戜汉鍛樺繀椤绘竻妤氱殑servlet瑙勮寖锛?

(1) HttpServletRequest.setCharacterEncoding()鏂规硶 浠呬粎鍙€傜敤浜庤缃畃ost鎻愪氦鐨剅equest body鐨勭紪鐮佽€屼笉鏄缃甮et鏂规硶鎻愪氦鐨剄ueryString鐨勭紪鐮併€傝鏂规硶鍛婅瘔搴旂敤鏈嶅姟鍣ㄥ簲璇ラ噰鐢ㄤ粈涔堢紪鐮佽В鏋恜ost浼犺繃鏉ョ殑鍐呭銆傚緢澶氭枃绔犲苟娌℃湁璇存槑杩欎竴鐐广€? (2) HttpServletRequest.getPathInfo()杩斿洖鐨勭粨鏋滄槸鐢盨ervlet鏈嶅姟鍣ㄨВ鐮?decode)杩囩殑銆? (3) HttpServletRequest.getRequestURI()杩斿洖鐨勫瓧绗︿覆娌℃湁琚玈ervlet鏈嶅姟鍣╠ecoded杩囥€? (4) POST鎻愪氦鐨勬暟鎹槸浣滀负request body鐨勪竴閮ㄥ垎銆?

(5) 缃戦〉鐨凥ttp澶翠腑ContentType("text/html; charset=GBK")鐨勪綔鐢細

(a) 鍛婅瘔娴忚鍣ㄧ綉椤典腑鏁版嵁鏄粈涔堢紪鐮侊紱

(b) 琛ㄥ崟鎻愪氦鏃讹紝閫氬父娴忚鍣ㄤ細鏍规嵁ContentType鎸囧畾鐨刢harset瀵硅〃鍗曚腑鐨勬暟鎹紪鐮侊紝鐒跺悗鍙戦€佺粰鏈嶅姟鍣ㄧ殑銆?

杩欓噷闇€瑕佹敞鎰忕殑鏄細杩欓噷鎵€璇寸殑ContentType鏄寚http澶寸殑ContentType锛岃€屼笉鏄湪缃戦〉涓璵eta涓殑ContentType銆?

涓夈€佷笅闈㈡垜浠垎鍒粠娴忚鍣ㄥ拰搴旂敤鏈嶅姟鍣ㄦ潵涓句緥璇存槑锛? URL锛歨ttp://localhost:8080/example/涓浗?name=涓浗

姹夊瓧聽聽聽聽 缂栫爜聽聽聽聽聽聽聽 浜岃繘鍒惰〃绀? 涓浗聽聽聽聽 UTF-8聽聽聽聽聽聽 0xe4 0xb8 0xad 0xe5 0x9b 0xbd[-28, -72, -83, -27, -101, -67]

涓浗聽聽聽聽 GBK聽聽聽聽聽聽聽聽 0xd6 0xd0 0xb9 0xfa[-42, -48, -71, -6]

涓浗聽聽聽聽 ISO8859-1 0x3f,0x3f[63, 63]淇℃伅澶卞幓

(涓€)銆佹祻瑙堝櫒

1銆丟ET鏂瑰紡鎻愪氦锛屾祻瑙堝櫒浼氬URL杩涜URL encode锛岀劧鍚庡彂閫佺粰鏈嶅姟鍣ㄣ€? (1) 瀵逛簬涓枃IE,濡傛灉鍦ㄩ珮绾ч€夐」涓€変腑鎬讳互UTF-8鍙戦€?榛樿鏂瑰紡)锛屽垯PathInfo鏄疷RL Encode鏄寜鐓TF-8缂栫爜,QueryString鏄寜鐓BK缂栫爜銆? http://localhost:8080/example/涓浗?name=涓浗

瀹為檯涓婃彁浜ゆ槸锛? GET /example/%E4%B8%AD%E5%9B%BD?name=%D6%D0%B9%FA

(2) 瀵逛簬涓枃IE,濡傛灉鍦ㄩ珮绾ч€夐」涓彇娑堟€讳互UTF-8鍙戦€侊紝鍒橮athInfo鍜孮ueryString鏄疷RL encode鎸夌収GBK缂栫爜銆? 瀹為檯涓婃彁浜ゆ槸锛? GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

(3) 瀵逛簬涓枃firefox锛屽垯pathInfo鍜宷ueryString閮芥槸URL encode鎸夌収GBK缂栫爜銆傚疄闄呬笂鎻愪氦鏄細

GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

寰堟樉鐒讹紝涓嶅悓鐨勬祻瑙堝櫒浠ュ強鍚屼竴娴忚鍣ㄧ殑涓嶅悓璁剧疆锛屼細褰卞搷鏈€缁圲RL涓璓athInfo鐨勭紪鐮併€傚浜庝腑鏂囩殑IE鍜孎IREFOX閮芥槸閲囩敤GBK缂栫爜QueryString銆?

灏忕粨锛氳В鍐虫柟妗堬細

1銆乁RL涓鏋滃惈鏈変腑鏂囩瓑闈濧SCII瀛楃锛屽垯娴忚鍣ㄤ細瀵瑰畠浠繘琛孶RLEncode銆備负浜嗛伩鍏嶆祻瑙堝櫒閲囩敤浜嗘垜浠笉甯屾湜鐨勭紪鐮侊紝鎵€浠ユ渶濂戒笉瑕佸湪URL涓洿鎺ヤ娇鐢ㄩ潪ASCII瀛楃锛岃€岄噰鐢║RL Encode缂栫爜杩囩殑瀛楃涓?.

姣斿锛歎RL锛歨ttp://localhost:8080/example/涓浗?name=涓浗

寤鸿锛歎RL锛歨ttp://localhost:8080/example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

鎴戜滑寤鸿URL涓璓athInfo鍜孮ueryString閲囩敤鐩稿悓鐨勭紪鐮侊紝杩欐牱瀵规湇鍔″櫒绔鐞嗙殑鏃跺€欎細鏇村姞绠€鍗曘€?

2銆佽繕鏈変竴涓棶棰橈紝鎴戝彂鐜板緢澶氱▼搴忓憳骞朵笉鏄庣櫧URL Encode鏄渶瑕佹寚瀹氬瓧绗﹂泦鐨勩€備笉鏄庣櫧鐨勪汉鍙互鐪嬬湅杩欑瘒鏂囨。锛歨ttp://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/net/URLEncoder.html

3銆?POST鎻愪氦

瀵逛簬POST鏂瑰紡锛岃〃鍗曚腑鐨勫弬鏁板€煎鏄€氳繃request body鍙戦€佺粰鏈嶅姟鍣紝姝ゆ椂娴忚鍣ㄤ細鏍规嵁缃戦〉鐨凜ontentType("text/html; charset=GBK")涓寚瀹氱殑缂栫爜杩涜瀵硅〃鍗曚腑鐨勬暟鎹繘琛岀紪鐮侊紝鐒跺悗鍙戠粰鏈嶅姟鍣ㄣ€傚湪鏈嶅姟鍣ㄧ鐨勭▼搴忎腑鎴戜滑鍙互閫氳繃Request.setCharacterEncoding() 璁剧疆缂栫爜锛岀劧鍚庨€氳繃request.getParameter鑾峰緱姝g‘鐨勬暟鎹€?

瑙e喅鏂规锛? 1銆佷粠鏈€绠€鍗曪紝鎵€闇€浠d环鏈€灏忔潵鐪嬶紝鎴戜滑瀵筓RL浠ュ強缃戦〉涓殑缂栫爜浣跨敤缁熶竴鐨勭紪鐮佸鎴戜滑鏉ヨ鏄瘮杈冨悎閫傜殑銆? 濡傛灉涓嶄娇鐢ㄧ粺涓€缂栫爜鐨勮瘽锛屾垜浠氨闇€瑕佸湪绋嬪簭涓仛涓€浜涚紪鐮佽浆鎹㈢殑浜嬫儏銆傝繖涔熸槸鎴戜滑涓轰粈涔堢湅鍒版湁缃戠粶涓婂ぇ閲忕殑璧勬枡浠嬬粛濡備綍瀵逛贡鐮佽繘琛屽鐞嗭紝鍏朵腑寰堝瑙e喅鏂规閮藉彧鏄竴鏃剁殑鏉冨疁涔嬭锛屾病鏈変粠鏍规湰涓婅В鍐抽棶棰樸€?

(浜?銆丼ervlet鏈嶅姟鍣? 聽聽聽聽聽聽聽聽聽 Servlet鏈嶅姟鍣ㄥ疄鐜扮殑Servlet閬囧埌URL鍜孭OST鎻愪氦鐨勬暟鎹腑鍚湁%鐨勫瓧绗︿覆锛屽畠浼氭寜鐓ф寚瀹氱殑瀛楃闆嗚В鐮併€備笅闈袱涓猄ervlet鏂规硶杩斿洖鐨勭粨鏋滈兘鏄粡杩囪В鐮佺殑锛? request.getParameter("name");聽

request.getPathInfo();

杩欓噷鎵€璇寸殑"鎸囧畾鐨勫瓧绗﹂泦"鏄湪搴旂敤鏈嶅姟鍣ㄧ殑閰嶇疆鏂囦欢涓厤缃€?

(1) tomcat鏈嶅姟鍣? 瀵逛簬tomcat鏈嶅姟鍣紝璇ユ枃浠舵槸server.xml

[html]聽 view plain copy print ? 聽

  1. <span聽style="font-size:12px;"><Connector聽port="8080"聽protocol="HTTP/1.1"聽聽聽
  2. 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽maxThreads="150"聽connectionTimeout="20000"聽聽聽
  3. 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirectPort="8443"聽URIEncoding="GBK"/></span>聽聽

URIEncoding鍛婅瘔鏈嶅姟鍣╯ervlet瑙g爜URL鏃堕噰鐢ㄧ殑缂栫爜銆?

<Connector port="8080" ... useBodyEncodingForURI="true" />

useBodyEncodingForURI鍛婅瘔鏈嶅姟鍣ㄨВ鐮乁RL鏃跺€欓渶瑕侀噰鐢╮equest body鎸囧畾鐨勭紪鐮併€?

(2) weblogic鏈嶅姟鍣? 瀵逛簬weblogic鏈嶅姟鍣紝璇ユ枃浠舵槸weblogic.xml聽

[html]聽 view plain copy print ? 聽

  1. <span聽style="font-size:12px;"><input-charset>聽聽
  2. <java-charset-name>GBK</java-charset-name>聽聽
  3. </input-charset></span>聽聽

(涓?娴忚鍣ㄦ樉绀? 娴忚鍣ㄦ牴鎹甴ttp澶翠腑鐨凜ontentType("text/html; charset=GBK")锛屾寚瀹氱殑瀛楃闆嗘潵瑙g爜鏈嶅姟鍣ㄥ彂閫佽繃鏉ョ殑瀛楄妭娴併€傛垜浠彲浠ヨ皟鐢℉ttpServletResponse.setContentType()璁剧疆http澶寸殑ContentType銆?

鎬荤粨锛? 1銆乁RL涓殑PathInfo鍜孮ueryString瀛楃涓茬殑缂栫爜鍜岃В鐮佹槸鐢辨祻瑙堝櫒鍜屽簲鐢ㄦ湇鍔″櫒鐨勯厤缃喅瀹氱殑锛屾垜浠殑绋嬪簭涓嶈兘璁剧疆锛屼笉瑕佹湡鏈涚敤request.setCharacterEncoding()鏂规硶鑳借缃甎RL涓弬鏁板€艰В鐮佹椂鐨勫瓧绗﹂泦銆傛墍浠ユ垜浠缓璁甎RL涓笉瑕佷娇鐢ㄤ腑鏂囩瓑闈濧SCII瀛楃锛屽鏋滃惈鏈夐潪ASCII瀛楃鐨勮瘽瑕佷娇鐢║RLEncode缂栫爜涓€涓嬶紝姣斿锛? http://localhost:8080/example1/example/涓浗

姝g‘鐨勫啓娉曪細

http://localhost:8080/example1/example/%E4%B8%AD%E5%9B%BD

骞朵笖鎴戜滑寤鸿URL涓笉瑕佸湪PathInfo鍜孮ueryString鍚屾椂浣跨敤闈濧SCII瀛楃锛屾瘮濡傦細http://localhost:8080/example1/example/涓浗?name=涓浗

鍘熷洜寰堢畝鍗曪細涓嶅悓娴忚鍣ㄥURL涓璓athInfo鍜孮ueryString缂栫爜鏃堕噰鐢ㄧ殑瀛楃闆嗕笉鍚岋紝浣嗗簲鐢ㄦ湇鍔″櫒瀵筓RL閫氬父浼氶噰鐢ㄧ浉鍚岀殑瀛楃闆嗘潵瑙g爜銆?

2銆佹垜浠缓璁甎RL涓殑URL Encode缂栫爜鐨勫瓧绗﹂泦鍜岀綉椤电殑contentType鐨勫瓧绗﹂泦閲囩敤鐩稿悓鐨勫瓧绗﹂泦锛岃繖鏍风▼搴忕殑瀹炵幇灏卞緢绠€鍗曪紝涓嶇敤鍋氬鏉傜殑缂栫爜杞崲銆?

鍒拌繖閲屽ぇ瀹惰鏄庣櫧url缂栫爜鐨勫師鐞嗕簡鍚с€傚啀鍥炶繃澶存潵鐪嬬湅鏈枃涓€寮€濮嬬粰鍑虹殑涓変釜url銆俬ttp://hi.baidu.com/鐖卞疂鐨勫 灞炰簬PathInfo锛屾墍浠ユ牴鎹甀E浠ュ強Firefox榛樿璁剧疆锛宨e鐢╱tf8 encode浜嗚url锛岃€宖irefox鐢╣bk encode鐨勶紝闅忎箣鏈嶅姟鍣ㄧ寰楀埌浜唘rl2鍜寀rl3涓嶅悓鐨剈rl銆?