Javascript의 unescape, Java(JSP)에서 사용하기

|


역시나 개인적인 필요로 의해......

입력값중 %RE 등등... 헥스값이 아닌 경우엔 입력값 그대로 출력함.


(Language : java)
  1. public static String unescape(String inp) {
  2.     String rtnStr = new String();
  3.     char [] arrInp = inp.toCharArray();
  4.     int i;
  5.     for(i=0;i<arrInp.length;i++) {
  6.         if(arrInp[i] == '%') {
  7.             String hex;
  8.             if(arrInp[i+1] == 'u') {    //유니코드.
  9.                 hex = inp.substring(i+2, i+6);
  10.                 i += 5;
  11.             } else {    //ascii
  12.                 hex = inp.substring(i+1, i+3);
  13.                 i += 2;
  14.             }
  15.             try{
  16.                 rtnStr += new String(Character.toChars(Integer.parseInt(hex, 16)));
  17.             } catch(NumberFormatException e) {
  18.                 rtnStr += "%";
  19.                 i -= (hex.length()>2 ? 5 : 2);
  20.             }
  21.         } else {
  22.             rtnStr += arrInp[i];
  23.         }
  24.     }
  25.  
  26.     return rtnStr;
  27. }
  28.  



Character.toChars()가 1.5부터 지원,
1.4 환경에서 사용가능한 unescape.
(Language : java)
  1. public static String unescape(String inp) {
  2.     String rtnStr = new String();
  3.     char [] arrInp = inp.toCharArray();
  4.     int i;
  5.     for(i=0;i<arrInp.length;i++) {
  6.         if(arrInp[i] == '%') {
  7.             String hex;
  8.             String str;
  9.             if(arrInp[i+1] == 'u') {    //유니코드.
  10.                 hex = inp.substring(i+2, i+6);
  11.                 i += 5;
  12.             } else {    //ascii
  13.                 hex = inp.substring(i+1, i+3);
  14.                 i += 2;
  15.             }
  16.             try{
  17.                 byte [] b;
  18.                 if(hex.length() == 2) {
  19.                     b = new byte[1];
  20.                     b[0] = (byte)(Integer.parseInt(hex, 16));
  21.                     str = new String(b, "ASCII");
  22.                 } else {
  23.                     b = new byte[2];
  24.                     b[0] = (byte)(Integer.parseInt(hex.substring(0,2), 16));
  25.                     b[1] = (byte)(Integer.parseInt(hex.substring(2,4), 16));
  26.                     str = new String(b, "UTF-16");
  27.                 }
  28.                 rtnStr += str;
  29.             } catch(NumberFormatException e) {
  30.                 e.printStackTrace();
  31.                 rtnStr += "%";
  32.                 i -= (hex.length()>2 ? 5 : 2);
  33.             } catch(Exception e) {
  34.             }
  35.         } else {
  36.             rtnStr += arrInp[i];
  37.         }
  38.     }
  39.  
  40.     return rtnStr;
  41. }
  42.  

And