URL中运用escape()编码,在java中使用request.getParameter()获取参数为null

URL中使用escape()编码,在java中使用request.getParameter()获取参数为null?? ??? private final static b

URL中使用escape()编码,在java中使用request.getParameter()获取参数为null
??
??? 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,???
??? 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,???
??? 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,???
??? 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,???
??? 0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 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, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 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, 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, 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, 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,???
??? 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, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,???
??? 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };???
??
??? /** *//**??
???? * 编码
???? *???
???? * @param s??
???? * @return??
???? */??
??? public static String escape(String s){???
??? StringBuffer sbuf = new StringBuffer();???
??? int len = s.length();???
??? for (int i = 0; i < len; i++){???
??? int ch = s.charAt(i);???
??? if ('A' <= ch && ch <= 'Z'){???
??? sbuf.append((char) ch);???
??? } else if ('a' <= ch && ch <= 'z'){???
??? sbuf.append((char) ch);???
??? } else if ('0' <= ch && ch <= '9'){??????????
??? sbuf.append((char) ch);???
??? } else if (ch == '-' || ch == '_' || ch == '.' || ch == '!' || ch == '~' || ch == '*' || ch == '\'' || ch == '(' || ch == ')'){???
??? sbuf.append((char) ch);???
??? } else if (ch <= 0x007F){???
??? 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();???
??? }???
??
??? /** *//**??
???? * 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
???? *???
???? * @param s??
???? * @return??
???? */??
??? public static String unescape(String s){???
??? StringBuffer sbuf = new StringBuffer();???
??? int i = 0;???
??? int len = s.length();???
??? while (i < len){???
??? int ch = s.charAt(i);???
??? if ('A' <= ch && ch <= 'Z'){???
??? sbuf.append((char) ch);???
??? } else if ('a' <= ch && ch <= 'z'){????
??? sbuf.append((char) ch);???
??? } else if ('0' <= ch && ch <= '9'){
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 << 4) | val[s.charAt(i + 1)];???
??? cint = (cint << 4) | val[s.charAt(i + 2)];???
??? i += 2;???
??? } else{???
??? cint = (cint << 4) | val[s.charAt(i + 2)];???
??? cint = (cint << 4) | val[s.charAt(i + 3)];???
??? cint = (cint << 4) | val[s.charAt(i + 4)];???
??? cint = (cint << 4) | val[s.charAt(i + 5)];???
??? i += 5;???
??? }???
??? sbuf.append((char) cint);???
??? } else{???
??? sbuf.append((char) ch);???
??? }???
??? i++;???
??? }???
??? return sbuf.toString();???
??? }???
??
??? public static void main(String[] args){???
??? String stest = "1234 abcd[]()<+>,.~\";???
??? System.out.println(stest);???
??? System.out.println(escape(stest));???
??? System.out.println(unescape(escape(stest)));???
??? }???
??
??? }