home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 November / Chip_2003-11_cd1.bin / software / dave / dqsd.exe / searches / jsenc.xml < prev    next >
Text File  |  2002-12-13  |  5KB  |  145 lines

  1. <search function="jsenc">
  2.   <name>Javascript String URL encoder/decoder</name>
  3.   <description>
  4.     Converts to/from url encoded strings<br/>
  5.     <div class="helpboxDescLabels">Switches:</div>
  6.     <table class="helpboxDescTable">
  7.           <tr><td>/all</td><td> - </td><td>encode all characters</td></tr>
  8.           <tr><td>/mailto</td><td> - </td><td>generates a javascript encoded mailto string that can be pasted into your webpage to hide it from email address harvesters</td></tr>
  9.       </table>
  10.     <div class="helpboxDescLabels">Examples:</div>
  11.     <table class="helpboxDescTable">
  12.           <tr><td>jsenc %78%20%79%20%7A</td><td> - </td><td>Returns x y z</td></tr>
  13.           <tr><td>jsenc x%20y%20z</td><td> - </td><td>Returns x y z</td></tr>
  14.           <tr><td>jsenc x y z</td><td> - </td><td>Returns x%20y%20z</td></tr>
  15.           <tr><td>jsenc /all x y z</td><td> - </td><td>Returns %78%20%79%20%7A</td></tr>
  16.         <tr><td>jsenc /mailto info@microsoft.com</td><td> - </td><td>link name and email address are both info@microsoft.com</td></tr>
  17.         <tr><td>jsenc /mailto info@microsoft.com Microsoft Information</td><td> - </td><td>link name is Microsoft Information and email address is info@microsoft.com</td></tr>
  18.       </table>
  19.   </description>
  20.   <category>Functions</category>
  21.   <contributor>Brent Beardsley</contributor>
  22.   
  23.   <script><![CDATA[
  24.     function jsenc(q)
  25.     {
  26.       if (nullArgs("jsenc",q))
  27.         return false;
  28.  
  29.       var all_chars = false;
  30.       var args = parseArgs(q, "all, mailto");
  31.       var str = args.q;
  32.       if (args.switches.length > 0) {
  33.         if (args.switches[0].name == 'all') {
  34.           all_chars = true;
  35.         } else if (args.switches[0].name == 'mailto') {
  36.           var r = jsenc_mailto(args.q);
  37.           if (r == false) {
  38.             // failed to encode mailto
  39.             nullArgs("jsenc", "?");
  40.           } else {
  41.             // successfully encoded mailto
  42.             setSearchWindowText(r, true);
  43.           }
  44.           return false;
  45.         } else {
  46.           nullArgs("jsenc", "?");        
  47.           return false;
  48.         }
  49.       }
  50.      
  51.       var ret_value = "";
  52.       if (str.match(/(%[0-9A-Fa-f]{2}|%u[0-9A-Fa-f]{4})+/)) {
  53.         // decode
  54.         ret_value = jsenc_decode(str);
  55.       } else {
  56.         // encode
  57.         ret_value = jsenc_encode(str, all_chars);
  58.       }
  59.       setSearchWindowText(ret_value, true);
  60.     }
  61.  
  62.     function jsenc_mailto(q)
  63.     {
  64.       var r = q.match(/(\S+@\S+\.\S+)(\s+(.*))?/);
  65.       if (r == null) 
  66.         return false;
  67.      
  68.       var email_address = r[1];
  69.       var email_name = r[3];
  70.       if (email_name == '') {
  71.         email_name = email_address;
  72.       }
  73.       email_address = "mailto:"+email_address;
  74.  
  75.       var should_swap_name = (email_name.match(/@.*?\./) != null) ? true : false;
  76.  
  77.       var swapped_email_address = jsenc_email_swap(email_address);
  78.       var swapped_email_name = should_swap_name ? jsenc_email_swap(email_name) : email_name;
  79.  
  80.       var encstr = "";
  81.       encstr += "var s='"+swapped_email_address+"';var r='';for(var i=0;i<s.length;i++,i++){r=r+s.substring(i+1,i+2)+s.substring(i,i+1)}";
  82.       if (should_swap_name) {
  83.         // encrypt the name too if it's an email address
  84.         encstr += "var u='"+swapped_email_name+"';var t='';for(var j=0;j<u.length;j++,j++){t=t+u.substring(j+1,j+2)+u.substring(j,j+1)}";
  85.         encstr += ("document.write('<a href=\"'+r+'\">'+t+'</a>')");
  86.       } else {
  87.         // name isn't an email address - don't waste the space swapping it
  88.         encstr += ("document.write('<a href=\"'+r+'\">"+email_name+"</a>')");
  89.       }
  90.       var outstr = "";
  91.       outstr += "<SCRIPT language=\"javascript\">eval(unescape('";
  92.       outstr += jsenc_encode(encstr, true);
  93.       outstr += "'))</SCRIPT>";
  94.       return outstr;
  95.     }
  96.  
  97.     function jsenc_email_swap(str)
  98.     {
  99.         var r = '';
  100.         for(var i=0;i<str.length;i++,i++)
  101.         {
  102.             r=r+str.substring(i+1,i+2)+str.substring(i,i+1);
  103.         }
  104.         return r;
  105.     }
  106.  
  107.     function jsenc_encode(str, all_chars)
  108.     {
  109.       var myall_chars = (typeof all_chars != "undefined") ? all_chars : true;
  110.       var outstr = '';
  111.       if (myall_chars != true) {
  112.         // encode all spaces, punctuation, accented characters, and any other non-ASCII characters
  113.         outstr = escape(str);
  114.       } else {
  115.         // encode all characters
  116.         for (var i=0; i < str.length; i++) {
  117.           var code = str.charCodeAt(i);
  118.           if (code > 255)    {
  119.             // unicode
  120.             var enc_str = "%u"+code.toString(16).toUpperCase();
  121.             while (enc_str.length < 6)
  122.               enc_str = "0" + enc_str;
  123.             outstr += enc_str;
  124.           } else {
  125.             // ascii
  126.             outstr += "%";
  127.             outstr += ((code < 16) ? "0" : "") + code.toString(16).toUpperCase();
  128.           } 
  129.         }
  130.       }
  131.       return outstr;
  132.     }
  133.  
  134.     function jsenc_decode(str) 
  135.     {
  136.       return unescape(str);
  137.     }
  138.   ]]></script>
  139.   <copyright>
  140.     Copyright (c) 2002 David Bau
  141.     Distributed under the terms of the
  142.     GNU Public License, Version 2 (http://www.gnu.org/copyleft/gpl.txt)
  143.   </copyright>
  144. </search>
  145.