javascript對文本encode編碼

         //source輸入的文本
   //dispaly爲true,表示格式化特殊字符,如把輸入的空格替換成&nbsp;換行替(\r\n))換成<br>
   //tabs默認爲4
  function htmlEncode(source, display, tabs)
  {
   function special(source)
   {
    var result = '';
    for (var i = 0; i < source.length; i++)
    {
     var c = source.charAt(i);
     if (c < ' ' || c > '~')
     {
      c = '&#' + c.charCodeAt() + ';';
     }
     result += c;
    }
    return result;
   }
   
   function format(source)
   {
    // Use only integer part of tabs, and default to 4
    tabs = (tabs >= 0) ? Math.floor(tabs) : 4;
    
    // split along line breaks
    var lines = source.split(/\r\n|\r|\n/);
    
    // expand tabs
    for (var i = 0; i < lines.length; i++)
    {
     var line = lines[i];
     var newLine = '';
     for (var p = 0; p < line.length; p++)
     {
      var c = line.charAt(p);
      if (c === '\t')
      {
       var spaces = tabs - (newLine.length % tabs);
       for (var s = 0; s < spaces; s++)
       {
        newLine += ' ';
       }
      }
      else
      {
       newLine += c;
      }
     }
     // If a line starts or ends with a space, it evaporates in html
     // unless it's an nbsp.
     newLine = newLine.replace(/(^ )|( $)/g, '&nbsp;');
     lines[i] = newLine;
    }
    
    // re-join lines
    var result = lines.join('<br />');
    
    // break up contiguous blocks of spaces with non-breaking spaces
    result = result.replace(/  /g, ' &nbsp;');
    
    // tada!
    return result;
   }

   var result = source;
   
   // ampersands (&)
   result = result.replace(/\&/g,'&amp;');

   // less-thans (<)
   result = result.replace(/\</g,'&lt;');

   // greater-thans (>)
   result = result.replace(/\>/g,'&gt;');
   
   if (display)
   {
    // format for display
    result = format(result);
   }
   else
   {
    // Replace quotes if it isn't for display,
    // since it's probably going in an html attribute.
    result = result.replace(new RegExp('"','g'), '&quot;');
   }

   // special characters
   result = special(result);
   
   // tada!
   return result;
  }

posted on 2007-08-24 17:31  感動常在  阅读(1895)  评论(0编辑  收藏  举报