- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
public static MvcHtmlString TextWithLinks(this HtmlHelper helper, string inputStr)
{
string html = String.Empty;
Uri url;
string[] arr = inputStr.Split(' ');
for (int i = 0; i < arr.Length; i++)
{
if (i != 0)
{
html += " ";
}
if (Uri.TryCreate(arr[i],UriKind.Absolute, out url))
{
html += String.Format("<a href='{0}' target='_blank'>{0}</a>", url.AbsoluteUri);
}else
{
html += arr[i];
}
}
return new MvcHtmlString(html);
}
someone 30.05.2013 12:02 # 0
Lure Of Chaos 30.05.2013 12:04 # 0
bormand 30.05.2013 12:06 # −7
P.S. Это я так понимаю обработка ссылок в чем-то типа BB кодов?
someone 30.05.2013 12:09 # +2
Но строка 17 - эталонный ГК. Если не распарсился URL - строка вставляется в HTML как есть, со всеми <script> и прочими радостями жизни.
bormand 30.05.2013 12:19 # −6
Ну опять же все зависит от того, насколько эта строка отфильтрована заранее, до вызова этой функции. Если в ней уже успели похерить все открывающие угловые скобки - то абсолютно ничего страшного.
Lure Of Chaos 30.05.2013 12:21 # 0
bormand 30.05.2013 12:23 # −8
Lure Of Chaos 30.05.2013 12:26 # 0
а если нет, см. альтернативную ветку, где все скобки выживают
bormand 30.05.2013 12:37 # −8
> где все скобки выживают
Я все-таки имел в виду, что скобки уже успели похерить ДО вызова TextWithLinks, а не в ней... Но тут я тупанул в плане амперсанда - его тоже нужно экранировать, но если его заэкранировать заранее - испортятся сложные URL'ы, в которых больше одного параметра. Единственное место, где можно адекватно заэкранировать амперсанд - как раз строка 17 ;(
P.S. Или & допустим в href и обработается корректно?
Lure Of Chaos 30.05.2013 12:42 # 0
по-хорошему, надо отдельно эскейпить текст и урлы
я в свое время тоже писал что-то подобное сабжу (выделение ссылок) и тоже столкнулся с такой проблемой
bormand 30.05.2013 12:53 # −6
http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href
Т.е. получается, что все-таки можно заэкранировать все к хуям в самом начале обработки текста, задолго ДО обработки ссылок. Другое дело, что тогда Uri.TryCreate может поломаться из-за &'ов и < в нем.
Lure Of Chaos 30.05.2013 13:23 # 0
bormand 30.05.2013 13:34 # −6
Percent-encoding должен был применить тот, кто отправлял текст (ну или браузер, из которого он копировал ссылку), т.к. в рассматриваемом коде мы уже никак не сможем отличить амперсанды внутри параметров от амперсандов между параметров (если постер не применил percent encoding сам).
Lure Of Chaos 30.05.2013 13:39 # 0
(блин, что-то я сегодня жестко туплю)
bormand 30.05.2013 13:44 # −7
Да я тоже не лучше... Просто тут любому крышу снесет этими многоуровневыми экранами. Самое противное - в вебе всё работает почти как надо, даже если я делаю кучу вещей неправильно. Вот за это я и ненавижу веб, хтмл, и всё, что с ними связано.
Lure Of Chaos 30.05.2013 13:52 # +3
в вебе ничего не ломается с сегфолтом, а спокойно себе криво-косо работает (что-то вроде "чувак, ты же именно на это рассчитывал")
а потом смотришь - а у тебя база дропнута, мыло-пассы уведены, сервак зомбирован в ботнет. а все потому, что где-то забыл что-то экранировать, понадеявшись, что это уже было сделано предыдущим слоем
bormand 30.05.2013 14:01 # −6
У нас на внутрикорпоративном сайте была бага - половина таблиц и дивов была не закрыта. Но эксплорер отлично показывал и печатал эту страничку. И всем было хорошо. А вот опера с фуррифоксом показывали, но не могли напечатать ;) Причем опера показывала просто чудеса ебанутости - в preview все было нормально, а в распечатках была полная срань ;)
Lure Of Chaos 30.05.2013 14:03 # 0
roman-kashitsyn 30.05.2013 14:02 # +17
Вам зачем боги абстракцию дали?
нафига над строками аппендом манипулировать, если можно строить дерево в памяти и всю логику рендеринга и экранирования поместить один раз туда?
Lure Of Chaos 30.05.2013 14:04 # 0
и вообще, я за event-driven
bormand 30.05.2013 13:46 # −8
Lure Of Chaos 30.05.2013 13:58 # 0
bormand 30.05.2013 14:03 # −8
Ну а незаэкранированный жабоскрипт тогда что сделает? ;)
Lure Of Chaos 30.05.2013 14:06 # 0
распидорасит страницу
inkanus-gray 30.05.2013 16:56 # 0
Lure Of Chaos 30.05.2013 16:57 # 0
inkanus-gray 30.05.2013 17:03 # +1
Lure Of Chaos 30.05.2013 17:05 # +1
inkanus-gray 30.05.2013 17:14 # +2
Lure Of Chaos 30.05.2013 17:15 # +3
guest 11.04.2017 12:49 # −10
--------
<a href=https://bezopasnik24.ru>контроль доступа турникеты</a> | https://bezopasnik24.ru
guest 14.04.2017 22:09 # −11
guest 14.04.2017 23:46 # −11
guest 15.04.2017 21:41 # −11
guest 21.04.2017 11:11 # −5
guest 21.04.2017 11:20 # −5
guest 21.04.2017 11:36 # −5
guest 21.04.2017 11:49 # −5
rss 21.04.2017 23:04 # 0
guest8 11.07.2020 03:51 # −999