개발도 하냐?
Prototype URL encode, decode
chaeya
2010. 6. 19. 16:27
반응형
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;
};
반응형