반응형
Prototype URL encode, decode 
    String.prototype.URLEncode = function URLEncode() {
        var SAFECHARS = "0123456789" +     // Numeric
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
     "abcdefghijklmnopqrstuvwxyz" +
     "-_.!~*'()";     // RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";
        var plaintext = this;
        var encoded = "";
        for (var i = 0; i < plaintext.length; i++) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+";    // x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
                    alert("Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
              "(URL encoding only supports 8-bit characters.)\n" +
        "A space (+) will be substituted.");
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for
        return encoded;
    };




    String.prototype.URLDecode = function URLDecode() {
        var HEXCHARS = "0123456789ABCDEFabcdef";
        var encoded = this;
        var plaintext = "";
        var i = 0;
        while (i < encoded.length) {
            var ch = encoded.charAt(i);
            if (ch == "+") {
                plaintext += " ";
                i++;
            } else if (ch == "%") {
                if (i < (encoded.length - 2)
     && HEXCHARS.indexOf(encoded.charAt(i + 1)) != -1
     && HEXCHARS.indexOf(encoded.charAt(i + 2)) != -1) {
                    plaintext += unescape(encoded.substr(i, 3));
                    i += 3;
                } else {
                    alert('Bad escape combination near ...' + encoded.substr(i));
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
                plaintext += ch;
                i++;
            }
        } // while
        return plaintext;
    };
반응형

'개발도 하냐?' 카테고리의 다른 글

PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09

+ Recent posts