首頁 >web前端 >js教程 >網址列傳遞中文參數亂碼在js裡用escape轉碼_javascript技巧

網址列傳遞中文參數亂碼在js裡用escape轉碼_javascript技巧

WBOY
WBOY原創
2016-05-16 17:24:121257瀏覽

亂碼,亂碼,頭大,煩,話說設定Tomcat後可以解決,但有的時候不管用了,這時,我們可以考慮轉碼方式不直接傳中文,在js裡用escape轉碼,記得需要用兩次,如:

var str=escape("這是中文參數");

str=escape(str);

xxx.do?name=str;

在後台透過一個類別的方法再轉回來:

Escape.unescape(request.getParameter("name"));

Escape類別如下:

複製程式碼 程式碼如下:

パッケージ com.laneasy.hy.util;

/**
* js エンコーディングおよびトランスコーディング Java 実装クラス
*
* @author yangjinde
*/
public class Escape {

/**定数の 16 進数。*/
private Final static String[] hex = { "00" 、「01」、「02」、「03」、「04」、「05」、
「06」、「07」、「08」、「09」、「0A」、「0B」、「0C」 "、"0D"、"0E"、"0F"、"10"、
"11"、"12"、"13"、"14"、"15"、"16"、"17"、" 18"、"19"、"1A"、"1B"、
"1C"、"1D"、"1E"、"1F"、"20"、"21"、"22"、"23"、 「24」、「25」、「26」、
「27」、「28」、「29」、「2A」、「2B」、「2C」、「2D」、「2E」、「2F」 、「30」、「31」、
「32」、「33」、「34」、「35」、「36」、「37」、「38」、「39」、「3A」、「3B」 "、"3C"、
"3D"、"3E"、"3F"、"40"、"41"、"42"、"43"、"44"、"45"、"46"、" 47"、
"48"、"49"、"4A"、"4B"、"4C"、"4D"、"4E"、"4F"、"50"、"51"、"52"、
「53」、「54」、「55」、「56」、「57」、「58」、「59」、「5A」、「5B」、「5C」、「5D」、
「5E」、「5F」、「60」、「61」、「62」、「63」、「64」、「65」、「66」、「67」、「68」、
「69」 、「6A」、「6B」、「6C」、「6D」、「6E」、「6F」、「70」、「71」、「72」、「73」、
「74」、「75」 "、"76"、"77"、"78"、"79"、"7A"、"7B"、"7C"、"7D"、"7E"、
"7F"、"80"、" 81"、"82"、"83"、"84"、"85"、"86"、"87"、"88"、"89"、
"8A"、"8B"、"8C"、 「8D」、「8E」、「8F」、「90」、「91」、「92」、「93」、「94」、
「95」、「96」、「97」、「98」 、「99」、「9A」、「9B」、「9C」、「9D」、「9E」、「9F」、
「A0」、「A1」、「A2」、「A3」、「A4」 "、"A5"、"A6"、"A7"、"A8"、"A9"、"AA"、
"AB"、"AC"、"AD"、"AE"、"AF"、" B0"、"B1"、"B2"、"B3"、"B4"、"B5"、
"B6"、"B7"、"B8"、"B9"、"BA"、"BB"、 「BC」、「BD」、「BE」、「BF」、「C0」、
「C1」、「C2」、「C3」、「C4」、「C5」、「C6」、「C7」 、「C8」、「C9」、「CA」、「CB」、
「CC」、「CD」、「CE」、「CF」、「D0」、「D1」、「D2」、「D3」 "、"D4"、"D5"、"D6"、
"D7"、"D8"、"D9"、"DA"、"DB"、"DC"、"DD"、"DE"、" DF"、"E0"、"E1"、
"E2"、"E3"、"E4"、"E5"、"E6"、"E7"、"E8"、"E9"、"EA"、 「EB」、「EC」、
「ED」、「EE」、「EF」、「F0」、「F1」、「F2」、「F3」、「F4」、「F5」、「F6」 、"F7"、
"F8"、"F9"、"FA"、"FB"、"FC"、"FD"、"FE"、"FF" };

/**定数 val.*/
private Final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x00、0x01、
0x02、 03、0x04、0x05、0x06 、0x07、0x08、0x09、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x0A、0x0B、0x0C、0x0D、0x0E、0x0F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x0A、0x0B 、0x0C、0x0D、0x0E、0x0F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F };

/**
* 逃げる。
*
* @param s
* s
*
* @return 文字列
*/
/**
* エンコード
*
* @param s
* @return
*/
public static String escape(String s) {
if (s != null) {
StringBuffer sbuf = new StringBuffer();
int len = s.length();
for (int i = 0; i int ch = s.charAt(i);
if ('A' sbuf.append((char) ch);
} else if ('a' sbuf.append((char) ch);
} else if ('0' sbuf.append((char) ch);
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
|| ch == '~' || ch == '*' || ch == ''' || ch == '('
|| ch == ')') {
sbuf.append((char) ch);
} else if (ch sbuf.append('%');
sbuf.append(hex[ch]);
} else {
sbuf.append('%');
sbuf.append('u');
sbuf.append(hex[(ch >>> 8)]);
sbuf.append(hex[(0x00FF & ch)]);
}
}
return sbuf.toString();
}
null を返します。
}

/**
* 逃脫。
*
* @param s
* s
*
* @return 字串
*/
/**
* 解碼 說明:本方法保證 不論參數s是否經過escape()編碼,均能得到正確的「解碼」結果
*
* @param s
* @return
*/
public static String unescape(String s) {
if (s != null) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int len = s.length();
while (i int ch = s.charAt(i);
if ('A' sbuf.append((char) ch);
} else if ('a' sbuf.append((char) ch);
} else if ('0' sbuf.append((char) ch);
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
|| ch == '~' || ch == '*' || ch == ''' || ch == '('
|| ch == ')') {
sbuf.append((char) ch);
} else if (ch == '%') {
int cint = 0;
if ('u' != s.charAt(i 1)) {
cint = (cint cint = (cint i = 2;
} else {
cint = (cint cint = (cint cint = (cint cint = (cint i = 5;
}
sbuf.append((char) cint);
} else {
sbuf.append((char) ch);
}
我;
}
return sbuf.toString();
}
回空;
}

}
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn