//source輸入的文本
//dispaly爲true,表示格式化特殊字符,如把輸入的空格替換成 換行替(\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, ' ');
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, ' ');
// tada!
return result;
}
var result = source;
// ampersands (&)
result = result.replace(/\&/g,'&');
// less-thans (<)
result = result.replace(/\</g,'<');
// greater-thans (>)
result = result.replace(/\>/g,'>');
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'), '"');
}
// special characters
result = special(result);
// tada!
return result;
}