JavaScript 编码/解码

以下是引用片段:
 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS编码 - CoolApp工具</title>
<style type="text/css">
<!--
body{
 background-color: #CCCCCC; 
}
body,td,p,input,textarea {
 font-family: "宋体";
 font-size: 9pt;
 text-decoration: none;
}
.STYLE1 {color: #333333}

-->
</style>
<script language="jscript"><!--
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
function base64encode(str) {
  var out,i,len;
  var c1,c2,c3;
  len = str.length;
  i = 0;
  out = "";
  while(i < len) {
 c1 = str.charCodeAt(i++) & 0xff;
 if(i == len)
 {
   out += base64EncodeChars.charAt(c1 >> 2);
   out += base64EncodeChars.charAt((c1 & 0x3) << 4);
   out += "==";
   break;
 }
 c2 = str.charCodeAt(i++);
 if(i == len)
 {
   out += base64EncodeChars.charAt(c1 >> 2);
   out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
   out += base64EncodeChars.charAt((c2 & 0xF) << 2);
   out += "=";
   break;
 }
 c3 = str.charCodeAt(i++);
 out += base64EncodeChars.charAt(c1 >> 2);
 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
 out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
 out += base64EncodeChars.charAt(c3 & 0x3F);
  }
  return out;
}
function base64decode(str) {
  var c1,c2,c3,c4;
  var i,len,out;
  len = str.length;
  i = 0;
  out = "";
  while(i < len) {
 /* c1 */
 do {
   c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c1 == -1);
 if(c1 == -1)
   break;
 /* c2 */
 do {
   c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c2 == -1);
 if(c2 == -1)
   break;
 out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
 /* c3 */
 do {
   c3 = str.charCodeAt(i++) & 0xff;
   if(c3 == 61)
 return out;
   c3 = base64DecodeChars[c3];
 } while(i < len && c3 == -1);
 if(c3 == -1)
   break;
 out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
 /* c4 */
 do {
   c4 = str.charCodeAt(i++) & 0xff;
   if(c4 == 61)
 return out;
   c4 = base64DecodeChars[c4];
 } while(i < len && c4 == -1);
 if(c4 == -1)
   break;
 out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
  }
  return out;
}
function utf16to8(str) {
  var out,i,len,c;
  out = "";
  len = str.length;
  for(i = 0; i < len; i++) {
 c = str.charCodeAt(i);
 if ((c >= 0x0001) && (c <= 0x007F)) {
   out += str.charAt(i);
 } else if (c > 0x07FF) {
   out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
   out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
   out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
 } else {
   out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
   out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
 }
  }
  return out;
}
function utf8to16(str) {
  var out,i,len,c;
  var char2,char3;
  out = "";
  len = str.length;
  i = 0;
  while(i < len) {
 c = str.charCodeAt(i++);
 switch(c >> 4)
 {
  case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
   // 0xxxxxxx
   out += str.charAt(i-1);
   break;
  case 12: case 13:
   // 110x xxxx  10xx xxxx
   char2 = str.charCodeAt(i++);
   out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
   break;
  case 14:
   // 1110 xxxx 10xx xxxx 10xx xxxx
   char2 = str.charCodeAt(i++);
   char3 = str.charCodeAt(i++);
   out += String.fromCharCode(((c & 0x0F) << 12) |
    ((char2 & 0x3F) << 6) |
    ((char3 & 0x3F) << 0));
   break;
 }
  }
  return out;
}

/////////////////////////////

function Escape(){
 if (frm.RLT.value=='')
  frm.RLT.value=escape(frm.URI.value)
 else{
  if (frm.reEnc.checked){  
   frm.RLT.value=escape(frm.RLT.value)
  }else{
   frm.RLT.value=escape(frm.URI.value)
  }
 } 
}

function UnEscape(){
 try{
  frm.RLT.value=unescape(frm.RLT.value)
 }catch(e){
  alert((e.number).toString() +"\n\n"+e.description);
 }
}
function EncodeURI(){
 if (frm.RLT.value=='')
  frm.RLT.value=encodeURI(frm.URI.value)
 else{
  if (frm.reEnc.checked){  
   frm.RLT.value=encodeURI(frm.RLT.value)
  }else{
   frm.RLT.value=encodeURI(frm.URI.value)
  }
 }
}
function DecodeURI(){
 try{
  frm.RLT.value=decodeURI(frm.RLT.value)  
 }catch(e){
  alert((e.number).toString() +"\n\n"+e.description);
 }
}
function EnBase64(){
 if (frm.RLT.value=='')
  frm.RLT.value=base64encode(utf16to8(frm.URI.value))
 else{
  if (frm.reEnc.checked){  
   frm.RLT.value=base64encode(utf16to8(frm.RLT.value))
  }else{
   frm.RLT.value=base64encode(utf16to8(frm.URI.value))
  }
 }
}
function DeBase64(){
 try{
  frm.RLT.value=utf8to16(base64decode(frm.RLT.value))  
 }catch(e){
  alert((e.number).toString() +"\n\n"+e.description);
 }
}

//--></script>
</head>

<body style="text-align:center;" onselectstart="with(event.srcElement) return(/INPUT|TEXTAREA/.test(tagName))">
<strong>JavaScript 编码/解码 1.0V<br />
</strong>
<br />
<br /><form name="frm" method="post" action="" onSubmit="return false">
<table width="500"  border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#dddddd">
  <tr>
    <td>源</td>
    <td>  <textarea name="URI" cols="66" rows="6" id="URI">test - 测试!</textarea></td>
  </tr>
  <tr>
    <td>结果</td>
    <td><textarea name="RLT" cols="66" rows="10" id="RLT" readonly></textarea></td>
  </tr>
  <tr>
    <td>选项</td>
    <td><input name="reEnc" type="checkbox" id="reEnc" value="1" /><label for="reEnc" style="cursor:hand;">从结果再编码</label></td>
  </tr>
  <tr>
    <td>方法</td>
    <td align="center"><p>    
        <input name="Submit" type="button" class="button" value="编码" onClick="EncodeURI()" />
      <input name="Submit2" type="button" class="button" value="解码" onClick="DecodeURI()" />
      (新)     
      <input name="Submit3" type="button" class="button" value="编码" onClick="Escape()" />
      <input name="Submit22" type="button" class="button" value="解码" onClick="UnEscape()" />
      (旧:不能用于URI)<br />
      <input name="Submit32" type="button" class="button" value="编码" onClick="EnBase64()" />
        <input name="Submit222" type="button" class="button" value="解码" onClick="DeBase64()" />
      (Base64)</p>      </td>
  </tr>
</table>
<div style="width:500px; height:120px; overflow-y:scroll; padding:5 5 5 5; background-color:#dddddd;">
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#e0e0e0">
  <tr>
    <td bgcolor="#EEEEEE"><strong>encodeURI</strong></td>
    <td bgcolor="#EEEEEE"><p class="STYLE1"><strong>encodeURI </strong>方法返回一个编码的 URI。如果您将编码结果传递给 <strong>decodeURI</strong>,那么将返回初始的字符串。<strong>encodeURI </strong>方法不会对下列字符进行编码:":"、"/"、";" 和   "?"。请使用 <strong>encodeURIComponent</strong> 方法对这些字符进行编码。</p></td>
  </tr>
  <tr>
    <td bgcolor="#EEEEEE"><strong>decodeURI</strong></td>
    <td bgcolor="#EEEEEE"><span class="STYLE1">使用 <strong>decodeURI </strong>方法代替已经过时的 <strong>unescape</strong> 方法。<br />
          <strong>decodeURI </strong>方法返回一个字符串值。<br />
      如果 <em>URIString</em> 无效,那么将产生一个 URIError。</span></td>
  </tr>
  <tr>
    <td bgcolor="#EEEEEE"><strong>escape</strong></td>
    <td bgcolor="#EEEEEE"><span class="STYLE1"><strong>escape</strong> 方法返回一个包含了 <em>charstring</em> 内容的字符串值( Unicode   格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 <strong>%</strong><em>xx</em> 编码代替,其中 <em>xx</em> 等于表示该字符的十六进制数。例如,空格返回的是 "%20"
      。<br />
      字符值大于 255 的以 <strong>%u</strong><em>xxxx</em> 格式存储。 <br />
      <strong>注意escape</strong> 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 <strong>encodeURI</strong> 和<strong>encodeURIComponent</strong> 方法。</span></td>
  </tr>
  <tr>
    <td bgcolor="#EEEEEE"><strong>unescape</strong> </td>
    <td bgcolor="#EEEEEE"><p class="STYLE1"><strong>unescape</strong> 方法返回一个包含 <em>charstring</em> 内容的字符串值。所有以 %<em>xx</em> 十六进制形式编码的字符都用 ASCII 字符集中等价的字符代替。<br />
      以 <strong>%u</strong><em>xxxx</em> 格式(Unicode 字符)编码的字符用十六进制编码 <em>xxxx</em> 的 Unicode 字符代替。 <br />
      <strong>注意unescape</strong> 方法不能用于解码统一资源标识码 (URI)。解该码可使用 <strong>decodeURI</strong> 和 <strong>decodeURIComponent</strong> 方法。</p></td>
  </tr>
</table></div>
</form>
<p><a href="http://www.ar114.com.cn/cai_tools/regexp.html">链接:正则调试器</a>
    <a href="http://www.ar114.com.cn/cai_tools/jstest.html" r="1">脚本调试器</a> <a href="/cai_tools/emlSr.asp">邮箱搜索工具</a></p>
<p>
</body>
</html>

 

From:http://www.ar114.com.cn/cai_tools/urlcode.html

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i454.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>