Hi,
First of all - nice control, and thank you for releasing it under CPOL
Next, I have made some minor improvements to you code. First of all I have changed the way you extract the individual chars in the HTML to be encoded. There's no need for using "HTML.Substring" when you just can use the index'er on the string instead (required your GetHex() to be parsed a char instead of a string).
Next, I have encapsulated the actual JavaScript encoding in a separat function - which is just called for each string. This will minimize the HTML output of the page.
The modified code is as follows:
<br />
public sealed class HTMLScrambler : System.Web.UI.WebControls.Literal<br />
{<br />
private static readonly string[] HEX = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" };<br />
private string _output = null;<br />
<br />
public enum ScrambleMode<br />
{<br />
HTML = 1,<br />
Javascript = 2<br />
}<br />
<br />
private ScrambleMode _mode = ScrambleMode.Javascript;<br />
<br />
public new ScrambleMode Mode<br />
{<br />
get { return _mode; }<br />
set { _mode = value; }<br />
}<br />
<br />
protected override void OnPreRender(EventArgs e)<br />
{<br />
base.OnPreRender(e);<br />
<br />
_output = Scramble(this.Text.Trim());<br />
}<br />
<br />
protected override void Render(HtmlTextWriter writer)<br />
{<br />
writer.Write(_output);<br />
}<br />
<br />
private string Scramble(string HTML)<br />
{<br />
try<br />
{<br />
StringBuilder js = new StringBuilder(HTML.Length*5);<br />
if (Mode == ScrambleMode.Javascript)<br />
{<br />
const string JS_Scramble = "JS_Scramble";<br />
<br />
if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.Page.GetType(), JS_Scramble))<br />
{<br />
const string JS_ScrambleScript = "<script type=\"text/javascript\">"+<br />
"function JSScramble(data){"+<br />
"var i,y;"+<br />
"y='';"+<br />
"for(i=0;i<data.length;i+=2)"+<br />
"y+=unescape('%'+data.substr(i,2));"+<br />
"return y;}"+<br />
"</script>";<br />
<br />
this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), JS_Scramble, JS_ScrambleScript);<br />
}<br />
<br />
js.Append("<script type=\"text/javascript\">");<br />
js.Append("document.write(JSScramble('");<br />
for (int i = 0, len = HTML.Length; i != len; ++i)<br />
{<br />
js.Append(GetHex(HTML[i]));<br />
}<br />
js.Append("'));");<br />
js.Append("</script>");<br />
}<br />
else
{<br />
for (int i = 0, len=HTML.Length; i!=len; ++i)<br />
{<br />
js.Append(GetCharcode(HTML[i]));<br />
}<br />
}<br />
return js.ToString();<br />
}<br />
catch<br />
{<br />
return HTML;<br />
}<br />
}<br />
<br />
private static string GetHex(char character)<br />
{<br />
char[] chrBuffer = { character };<br />
byte[] bytBuffer = Encoding.Default.GetBytes(chrBuffer);<br />
return HEX[(int)bytBuffer[0]];<br />
}<br />
<br />
private static string GetCharcode(char character)<br />
{<br />
char[] chrBuffer = { character };<br />
byte[] bytBuffer = Encoding.Default.GetBytes(chrBuffer);<br />
return "&#" + (int)bytBuffer[0] + ";";<br />
}<br />
}<br />
Ones again, thank you for the code
/Michael
|