요즘 개발하고 있는 프로그램에
javascript 에 있는 escape 함수가 필요해져서 삽질을 시작했다.

자바 스크립트로 테스트 html 페이지 만들어
ASCII 코드 ~127 까지 넣어보면서 -_- 삽질을 했다.

public static String escape(String string){
       StringBuffer sb = new StringBuffer();
       String ncStr = "*+-./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
       char c;
       
       for(int i=0;i<string.length();i++){
              c = string.charAt(i);
              if(c>0x7f){
                     sb.append("%u");
                     sb.append(Integer.toHexString((int)c).toUpperCase());
              }
              else if(ncStr.indexOf((int)c)==-1){
                     sb.append('%');
                     if(c<=0xf)
                            sb.append('0');
                     sb.append(Integer.toHexString((int)c).toUpperCase());
              }
              else
                     sb.append(c);
       }
       
       return sb.toString();
}

Trackback Address :: http://blog.kfmes.com/trackback/137

  1. BlogIcon LinDol 2007/02/19 22:28 댓글주소 | 수정 | 삭제 | 댓글

    결국은 구현 하셨군요~ ^^
    ㅊㄱㅅ ㅋㅋ

  2. BlogIcon rath 2007/02/20 13:31 댓글주소 | 수정 | 삭제 | 댓글

    와와 대단~

  3. 박정규 2007/09/04 15:48 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요..
    제가 지금 급하게 필요해서 그런데요...

    혹시 , unescape() 스크립트 함수를
    .java 파일로 구현해 보신 건 없으시나요??

    아~~~

    nateman@empal.com

    부탁드립니다.

  4. 수평선 2009/06/08 13:56 댓글주소 | 수정 | 삭제 | 댓글

    public class EscapeUnescape {

    public static String escape(String src) {
    int i;
    char j;
    StringBuffer tmp = new StringBuffer();
    tmp.ensureCapacity(src.length() * 6);
    for (i = 0; i < src.length(); i ) {
    j = src.charAt(i);
    if (Character.isDigit(j) || Character.isLowerCase(j)
    || Character.isUpperCase(j))
    tmp.append(j);
    else if (j < 256) {
    tmp.append("%";);
    if (j < 16)
    tmp.append("0";);
    tmp.append(Integer.toString(j, 16));
    } else {
    tmp.append("%u";);
    tmp.append(Integer.toString(j, 16));
    }
    }
    return tmp.toString();
    }

    public static String unescape(String src) {
    StringBuffer tmp = new StringBuffer();
    tmp.ensureCapacity(src.length());
    int lastPos = 0, pos = 0;
    char ch;
    while (lastPos < src.length()) {
    pos = src.indexOf("%", lastPos);
    if (pos == lastPos) {
    if (src.charAt(pos 1) == 'u') {
    ch = (char) Integer.parseInt(src
    .substring(pos 2, pos 6), 16);
    tmp.append(ch);
    lastPos = pos 6;
    } else {
    ch = (char) Integer.parseInt(src
    .substring(pos 1, pos 3), 16);
    tmp.append(ch);
    lastPos = pos 3;
    }
    } else {
    if (pos == -1) {
    tmp.append(src.substring(lastPos));
    lastPos = src.length();
    } else {
    tmp.append(src.substring(lastPos, pos));
    lastPos = pos;
    }
    }
    }
    return tmp.toString();
    }

    public static void main(String[] args) {
    String tmp = "中文";
    System.out.println("testing escape : " tmp);
    tmp = escape(tmp);
    System.out.println(tmp);
    System.out.println("testing unescape :" tmp);
    System.out.println(unescape("%u4e2d%u6587";));
    }
    }

  5. BlogIcon 쿠나 2010/01/16 23:51 댓글주소 | 수정 | 삭제 | 댓글

    훌륭하십니다!
    소스 좀 인용할게요 :)


◀ PREV : [1] : ... [85] : [86] : [87] : [88] : [89] : [90] : [91] : [92] : [93] : ... [218] : NEXT ▶