2011-03-25 131 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

相關問題