- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <HTML>
- <head>
- <title>
- Base64 and URL and Hex Encoding and Decoding
- </title>
- <meta name="description" content="Encodes or decodes data in Base64 or URL encoding using client side JavaScript"
- />
- <meta name="keywords" content="base64, base 64, urlencode, urldecode, hexencode, hex encode, hexdecode hex decode, javascript base64, javascript base 64, javascript urlencode, javascript urldecode, javascript hexencode, javascript hexdecode"
- />
- <link rel="shortcut icon" href="http://ostermiller.org/favicon.ico" type="image/x-icon"
- />
- <script language=JavaScript type="text/javascript">
- < !--
- function urlDecode(str) {
- str = str.replace(new RegExp('\\+', 'g'), ' ');
- return unescape(str);
- }
- function urlEncode(str) {
- str = escape(str);
- str = str.replace(new RegExp('\\+', 'g'), '+');
- return str.replace(new RegExp(' ', 'g'), '+');
- }
- var END_OF_INPUT = -1;
- var base64Chars = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/');
- var reverseBase64Chars = new Array();
- for (var i = 0; i < base64Chars.length; i++) {
- reverseBase64Chars[base64Chars[i]] = i;
- }
- var base64Str;
- var base64Count;
- function setBase64Str(str) {
- base64Str = str;
- base64Count = 0;
- }
- function readBase64() {
- if (!base64Str) return END_OF_INPUT;
- if (base64Count >= base64Str.length) return END_OF_INPUT;
- var c = base64Str.charCodeAt(base64Count) & 0xff;
- base64Count++;
- return c;
- }
- function encodeBase64(str) {
- setBase64Str(str);
- var result = '';
- var inBuffer = new Array(3);
- var lineCount = 0;
- var done = false;
- while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT) {
- inBuffer[1] = readBase64();
- inBuffer[2] = readBase64();
- result += (base64Chars[inBuffer[0] >> 2]);
- if (inBuffer[1] != END_OF_INPUT) {
- result += (base64Chars[((inBuffer[0] << 4) & 0x30) | (inBuffer[1] >> 4)]);
- if (inBuffer[2] != END_OF_INPUT) {
- result += (base64Chars[((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6)]);
- result += (base64Chars[inBuffer[2] & 0x3F]);
- } else {
- result += (base64Chars[((inBuffer[1] << 2) & 0x3c)]);
- result += ('=');
- done = true;
- }
- } else {
- result += (base64Chars[((inBuffer[0] << 4) & 0x30)]);
- result += ('=');
- result += ('=');
- done = true;
- }
- lineCount += 4;
- if (lineCount >= 76) {
- result += ('\n');
- lineCount = 0;
- }
- }
- return result;
- }
- function readReverseBase64() {
- if (!base64Str) return END_OF_INPUT;
- while (true) {
- if (base64Count >= base64Str.length) return END_OF_INPUT;
- var nextCharacter = base64Str.charAt(base64Count);
- base64Count++;
- if (reverseBase64Chars[nextCharacter]) {
- return reverseBase64Chars[nextCharacter];
- }
- if (nextCharacter == 'A') return 0;
- }
- return END_OF_INPUT;
- }
- function ntos(n) {
- n = n.toString(16);
- if (n.length == 1) n = "0" + n;
- n = "%" + n;
- return unescape(n);
- }
- function decodeBase64(str) {
- setBase64Str(str);
- var result = "";
- var inBuffer = new Array(4);
- var done = false;
- while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT) {
- inBuffer[2] = readReverseBase64();
- inBuffer[3] = readReverseBase64();
- result += ntos((((inBuffer[0] << 2) & 0xff) | inBuffer[1] >> 4));
- if (inBuffer[2] != END_OF_INPUT) {
- result += ntos((((inBuffer[1] << 4) & 0xff) | inBuffer[2] >> 2));
- if (inBuffer[3] != END_OF_INPUT) {
- result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
- } else {
- done = true;
- }
- } else {
- done = true;
- }
- }
- return result;
- }
- var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
- function toHex(n) {
- var result = ''
- var start = true;
- for (var i = 32; i > 0;) {
- i -= 4;
- var digit = (n >> i) & 0xf;
- if (!start || digit != 0) {
- start = false;
- result += digitArray[digit];
- }
- }
- return (result == '' ? '0': result);
- }
- function pad(str, len, pad) {
- var result = str;
- for (var i = str.length; i < len; i++) {
- result = pad + result;
- }
- return result;
- }
- function encodeHex(str) {
- var result = "";
- for (var i = 0; i < str.length; i++) {
- result += pad(toHex(str.charCodeAt(i) & 0xff), 2, '0');
- }
- return result;
- }
- function decodeHex(str) {
- str = str.replace(new RegExp("s/[^0-9a-zA-Z]//g"));
- var result = "";
- var nextchar = "";
- for (var i = 0; i < str.length; i++) {
- nextchar += str.charAt(i);
- if (nextchar.length == 2) {
- result += ntos(eval('0x' + nextchar));
- nextchar = "";
- }
- }
- return result;
- }
- //-->
- </script>
- </head>
- <body>
- <form name=code onsubmit="return false()">
- <textarea name=text style='width:100%;height:75%;' onfocus='if (this.value=="Enter text to encode or decode here."){this.value="";}'>
- Enter text to encode or decode here.
- </textarea>
- <table>
- <tr>
- <td align=center>
- <input value="Encode" type=button onclick="document.code.text.value=urlEncode(document.code.text.value);">
- </td>
- <td align=center>
- URL
- </td>
- <td align=center>
- <input value="Decode" type=button onclick="document.code.text.value=urlDecode(document.code.text.value);">
- </td>
- </tr>
- <tr>
- <td align=center>
- <input value="Encode" type=button onclick="document.code.text.value=encodeBase64(document.code.text.value);">
- </td>
- <td align=center>
- Base 64
- </td>
- <td align=center>
- <input value="Decode" type=button onclick="document.code.text.value=decodeBase64(document.code.text.value);">
- </td>
- </tr>
- <tr>
- <td align=center>
- <input value="Encode" type=button onclick="document.code.text.value=encodeHex(document.code.text.value);">
- </td>
- <td align=center>
- Hex
- </td>
- <td align=center>
- <input value="Decode" type=button onclick="document.code.text.value=decodeHex(document.code.text.value);">
- </td>
- </tr>
- <tr>
- <td align=center>
- </td>
- <td align=center>
- <input type=reset value=Clear>
- </td>
- <td align=center>
- </td>
- </tr>
- </table>
- </form>
- <hr>
- Base64 encode/decode was ported from a
- <a href="http://ostermiller.org/utils/Base64.html">
- Java Base64 encoder/decoder
- </a>
- .
- <br>
- Base64 encode/decode was ported to
- <a href="http://ostermiller.org/base64_actionscript.html">
- Macromedia Actionscript
- </a>
- .
- <br>
- <h3>
- License
- </h3>
- <p>
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at your option)
- any later version.
- </p>
- <p>
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the
- <a href="http://www.gnu.org/copyleft/gpl.html">
- GNU General Public License
- </a>
- for more details.
- </p>
- <div style="padding:0.2cm;">
- <a href="http://ostermiller.org/calc/">
- More converters, calculators, and other JavaScript goodies
- </a>
- </div>
- <div style="padding:0.2cm;text-align:right;">
- <a href="http://ostermiller.org/">
- ostermiller.org
- </a>
- (
- <a href="http://ostermiller.org/siteindex.html">
- site index
- </a>
- )
- </div>
- <div style="padding:0.2cm;">
- <p>
- Copyright
- <a href="http://ostermiller.org/contact.pl?regarding=JavaScript+Encoding"
- class=mail>
- Stephen Ostermiller
- </a>
- 2003-2006
- </p>
- </div>
- </body>
- </HTML>
来源: https://www.jb51.net/article/8317.htm