很多熱心的博友為方便幫助他人,在博客上留下自己Email地址。為防止垃圾郵件,把郵件地址以圖片的形式或以文本將@符號替換為(at)或#等形式發布。這樣難免給他人帶來一點不便。在浏覽衣兄博客時,發現其郵件鏈接有些有趣,稍研究了一下,原來是將郵件地址拆分並進行了編碼,看起來根本就不是郵件地址。這樣就可以越過那些"郵件地址采集器"。在實驗中發現將mailto:進行編碼,Outlook也能識別,其他郵件客戶端沒有進行測試。
花了一袋煙的功夫寫了個小工具。思路是:將郵件地址拼接成“mailto:[email protected]?Subject=”的形式,然後隨機拆分該字符串,編碼後賦值到javascript變量。最後將javascript變量相加。編碼方式是:將單字節字符編碼為%XX的形式,(unicode)雙字節字符編碼為uXXXX形式。具體實現見代碼。
生成的效果見公告欄。
多少粘點代碼吧(汗...)
// Divide the string to some parts.
protected List<string> PartString(string input)
{
List<string> list = new List<string>();
Random rnd = new Random();
int len = input.Length;
int idx = 0;
while (len > 0)
{
int tmp = rnd.Next(1, len + 1);
list.Add(input.Substring(idx, tmp));
idx += tmp;
len -= tmp;
}
return list;
}
// Encode string. ASCII: %xx format; double bytes: uxxxx format.
protected string EncodeString(string input)
{
StringBuilder output = new StringBuilder(input.Length * 4);
foreach (char c in input)
{
int charValue = (int)c;
if (charValue > 255)
{
output.AppendFormat("\u{0:x4}", charValue);
}
else
{
output.AppendFormat("%{0:x2}", charValue);
}
}
return output.ToString();
}
// Generate unique variable name.
protected string GenerateVarName()
{
Random rnd = new Random();
string output = ((char)((int)a