2011-03-25 4 views
0

Я немного искал и не совсем понял, почему мое решение не работает. В основном мне нужно взять строку (которая является HTML-кодом), проанализировать ее и искать ссылки mailto (которые я хочу заменить как часть обфускации). Вот то, что я до сих пор:Соответствие URL-адресу Кодированный адрес электронной почты в C#

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)); 

Текст выходит из WYSIWYG текстовый редактор (Telrik RadEditor для тех, кто знаком) и для всех намерений и целей у меня нет доступа, чтобы иметь возможность контролировать то, что выходит из него.

В принципе мне нужно найти и заменить любой:

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

С:

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

Некоторые фоне: Я пытаюсь создать MailTo ссылку, которая позволит избежать обнаружения комбайнов. Проблема в том, что я получаю строку с адресом электронной почты в качестве стандартной ссылки mailto. Я не могу управлять входящей строкой, поэтому mailto всегда будет незащищенным почтовым ящиком. Моя цель - найти все из них, запутать их, а затем использовать JavaScript для «исправления» ссылки, чтобы человеческие vistors могли легко использовать ссылки mailto. Я открыт для новых подходов, а также для модификации вышеуказанного кода.

+0

Напоминает мне песню. Все, что вы можете сделать, может сделать лучше. Это тот. Помните, что у вас ограниченные ресурсы. Харвестеры стремятся к неограниченным ресурсам. – btlog

+2

Email harversters не ограничивается поиском _mailto: _ префиксов в ваших hrefs ... – canon

+0

У вас обоих очень хорошие точки, но ни один из них мне не помогает. Я пытаюсь обфускать mailto, потому что это единственное, что я могу найти. Реальная проблема заключается в том, что я не могу получить .Net, чтобы найти совпадения с электронными письмами, закодированными в URL. – jkinz

ответ

0

Вы можете использовать регулярное выражение или пакет гибкости HTML для поиска и обфускации всего вашего сообщения mailto. Если вы хотите хорошее запутывание попробуйте прочитать ten methods to obfuscate e-mail addresses compared

EDIT: извините, от первой версии вашего вопроса я не получил бы у вас были проблема в принятии вашего регулярок работы. Поскольку вы назначаете текстовый редактор WYSIWYG, я думаю, что HTML-код, который выходит из него, должен быть довольно «обычным», поэтому вам может быть полезно использовать регулярное выражение. Вы можете попробовать изменить свою линию замены следующим образом:

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

К сожалению, большинство из них требуют от меня изменить ссылку mailto (по сути, что я пытаюсь сделать в моем .Net-коде выше), но, как я уже сказал, у меня нет контроля над тем, что выходит из текстового редактора. Я также не могу сказать своим клиентам «вам нужно набрать это вместо этого», к сожалению, они не настолько сообразительны. Таким образом, я все еще зацикливаюсь на целом, я не могу найти ссылки, потому что RegEx не может найти электронные письма с кодировкой url. :-( – jkinz

+0

@Joel, если у вас всегда есть адрес электронной почты человека в тексте ссылки mailto, вы можете его захватить оттуда. Я включил пример в свой ответ –