2011-03-25 132 views
0

我做了一些搜索,并没有完全弄清楚为什么我的解决方案无法正常工作。基本上我需要一个字符串(这是HTML代码)解析它并查找mailto链接(然后我想要替换为混淆的一部分)。以下是我迄今:在C#中匹配URL编码的电子邮件地址#

string text = "<p>Some Person<br /> Person's Position<br />p. 123-456-7890<br /> e. <a title=\"Email Some Person\" target=\"_blank\" href=\"mailto:someperson%40domain.com\">[email protected]</a></p>"; 
    text = Server.UrlDecode(text); 
    string safeEmails = Regex.Replace(text, "(<a href=\"mailto:)(.*?)(%40)(.*?)(\">)(.*?)(</a>)", "<a class=\"mailme\" href=\"$2*$4\">$6</a>"); 
    Response.Write(Server.HtmlDecode(safeEmails)); 

的文本出来一个所见即所得的文本编辑器(Telrik RadEditor对于熟悉)和用于所有意图和目的,我没有获得能够控制什么正在走出来。

基本上我需要找到并更换:

<a href="mailto:someone%40domain.com">[email protected]</a> 

有了:

<a class="mailme" href="[email protected]">[email protected]</a> 

一些背景:我试图创建一个mailto链接,将避免收割机检测。问题是我收到一封带有电子邮件的字符串作为标准的mailto链接。我无法控制传入的字符串,所以mailto将始终是未受保护的mailto。我的目标是找到它们,混淆它们,然后使用JavaScript来“修复”链接,以便人类访问者可以轻松使用mailto链接。我接受新方法以及修改上述代码。

+0

提醒我一首歌。你可以做的任何事情都可以做得更好。那是那个吗?请记住,您的资源有限。收割机倾向于无限的资源。 – btlog 2011-03-25 20:39:06

+2

电子邮件劫机者不仅限于在您的hrefs中寻找_mailto:_前缀... – canon 2011-03-25 20:39:39

+0

你们两个都有非常有效的要点,但他们都不能帮助我。我试图混淆mailto,因为那是我能找的唯一的东西。真正的问题是,我似乎无法让.Net找到与其中的URL编码电子邮件匹配。 – jkinz 2011-03-27 15:12:07

回答

0

您可以使用正则表达式或HTML敏捷性包来查找和混淆所有的mailto。如果你想有一个良好的混淆尝试阅读ten methods to obfuscate e-mail addresses compared

编辑: 对不起,从你的问题的第一个版本,我没有得到你不得不使你的正则表达式的工作问题。由于您使用的是所见即所得的文本编辑器,我认为从它出来的HTML应该是非常“常规”的,所以您可能会很好地使用正则表达式。 你可以尝试改变你的Replace行,像这样:

string safeEmails = Regex.Replace(text, "href=\"mailto:.*\">(.*)</a>", "class=\"mailme\" href=\"$1\">$1</a>"); 
+0

不幸的是,其中大部分需要我改变mailto链接(基本上我在上面的.Net代码中试图做的),但正如我所说的,我无法控制文本编辑器的内容。我也不能说我的客户“你需要输入这个”,不幸的是,他们并不那么聪明。所以我仍然坚持整体,我找不到链接,因为.Net的RegEx似乎并不想找到URL编码的电子邮件。 :-( – jkinz 2011-03-27 15:18:49

+0

@Joel如果你总是在邮件链接的文本中有人的电子邮件地址,你可以从那里捕获它。我在我的答案中包含了一个例子 – 2011-03-27 17:00:08

相关问题