標籤:
URL由來:
一般來說,URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號。比如,世界上有英文字母的網址 “http://www.abc.com”,但是沒有希臘字母的網址“http://www.aβγ.com”(讀作阿爾法-貝塔-伽瑪.com)。這是 因為網路標準RFC 1738 做了硬性規定:
"...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編碼方法都不一樣。把它們的差異解釋 清楚之後,我再說如何用Javascript找到一個統一的編碼方法。
具體代碼如下:(切記切記,一定要注意編碼)
package com.util;import java.io.UnsupportedEncodingException;/** * url轉碼、解碼 * * @author lifq * @date 2015-3-17 下午04:09:35 */public class UrlUtil { private final static String ENCODE = "GBK"; /** * URL 解碼 * * @return String * @author lifq * @date 2015-3-17 下午04:09:51 */ public static String getURLDecoderString(String str) { String result = ""; if (null == str) { return ""; } try { result = java.net.URLDecoder.decode(str, ENCODE); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** * URL 轉碼 * * @return String * @author lifq * @date 2015-3-17 下午04:10:28 */ public static String getURLEncoderString(String str) { String result = ""; if (null == str) { return ""; } try { result = java.net.URLEncoder.encode(str, ENCODE); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** * * @return void * @author lifq * @date 2015-3-17 下午04:09:16 */ public static void main(String[] args) { String str = "測試1"; System.out.println(getURLEncoderString(str)); System.out.println(getURLDecoderString(str)); }}
java實現url轉碼、解碼