반응형
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 |