информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsСетевые кракеры и правда о деле ЛевинаГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / guestbook
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
а, ну да 16.12.05 14:23  Число просмотров: 3091
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Только $text =~ s#((?:http|ftp|https)://.*?)([.,]*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi; - запятые тоже попадаются
<guestbook>
Про ссылки 15.12.05 00:48  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 15.12.05 00:50  Количество правок: 2
<"чистая" ссылка>
Когда я пишу ссылку непосредственно в сообщении, то часто ставлю после нее точку: http://bbspot.com/archives/index_top11.html. Форум эту последнюю точку тоже рассматривает как часть ссылки, что не есть гуд. ИМХО, последнюю точку из ссылки надо убирать.
если б это можно было сделать одним простым регекспом 15.12.05 04:06  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Можно :) 15.12.05 07:47  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
У меня когда-то вставала схожая задача:

Вопрос по регулярным выражениям
дело в том, что точка - это вполне разрешенная часть url, и я не могу превращать ее в стоп-символ 15.12.05 12:00  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Не знаю ни одного урла с точкой в конце (хотя это и не запрещено) 15.12.05 12:30  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 15.12.05 12:35  Количество правок: 3
<"чистая" ссылка>
Если уж очень припрет, то ссылку с точкой можно вставить в специальное поле (внизу), которое эту самую ссылку преобразовывать не будет или (для продвинутых) заменить ее шестнадцатиричным кодом со знаком процента. Ну а пробел - запрещенный символ, так что

/(bla-bla-bla)\.*\s/

Должно помочь
речь не об этом 15.12.05 14:14  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Урлы сейчас выкусываются регекспом, который берет все, что начинается с http/https/ftp/ и заканчивается набором стоп-символов. Если я добавлю точку в стоп-символы, урл закончится на первой же точке в адресе. Быстрая правка этого регекспа мне сходу в голову не приходит, а сильно усложнять его не хочется, поскольку отрабатывает он при каждом показе сообщения.
А добавить *после* выкусывания урла из текста откусывание замыкающей точки 15.12.05 14:55  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> усложнять его не хочется, поскольку отрабатывает он при
> каждом показе сообщения.

s/(\w*)\.$/$1/

Или этот регэксп автоматом сразу заменяет http... на < a href=http... > ?
да, конечно сразу 15.12.05 15:16  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Можно конечно добавить второй регексп, пробегающий поверх и чистящий конечные точки.
Тоже вариант 15.12.05 17:50  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Можно конечно добавить второй регексп, пробегающий поверх и
> чистящий конечные точки.

Если запускать его только в том случае, если первый регэксп что-то нашел
ok 15.12.05 21:34  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Если я правильно понял, 16.12.05 02:54  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 16.12.05 02:55  Количество правок: 1
<"чистая" ссылка>
то замена "link" на <a href="link"> проводится при отображении сообщения и в базе хранится сообщение в изначальном виде чтобы его можно было править.

По-моему было бы эффективнее хранить в базе сообщений ссылки уже преобразованные к виду <a href="link">. В случае же, если надо сообщение поправить, то убрать тэги <a> перед правкой сообщения не составляет труда. Зато это снимет нагрузку по преобразованию ссылок при каждом просмотре сообщения.

ЗЫ. Что насчет такого регеспа?:
$comm=~s#((http|ftp)://[\w\.\-?@:=&%\#/]+)([^\.,?:-]*)#<a href="$1" target=_blank>$1$3</a>#g;
Не уверен, что будет работать, но главное идея (на скорую руку переделал рабочий регесп со своего сайта, который тоже страдает от точек в ссылках - идея поправить это у себя пришла только сейчас, когда заметил это на bugtraq :), если при переделке не наделал косяков - должно работать).
да я уже сделал парой регекспов 16.12.05 04:32  
Автор: dl <Dmitry Leonov>
Отредактировано 16.12.05 04:45  Количество правок: 1
<"чистая" ссылка>
if($text =~ s#((?:http|ftp|https)://.*?)([\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi)
{
	$text =~ s#<a href="(.*?)[.,]" target=_blank>(.*?)([.,])</a>#<a href="$1" target=_blank>$2</a>$3#gi;
}

---

Что касается изменения при записи, я все же предпочитаю хранить оригинал, сохраняя гибкость на случай будущих изменений - иначе при очередном изменении в обработке придется еще и старые результаты обработки переделывать.

> ЗЫ. Что насчет такого регеспа?:
> $comm=~s#((http|ftp)://[\w\.\-?@:=&%\#/]+)([^\.,?:-]*)#
> <a href="$1" target=_blank>$1$3</a>#g;

Неа, не работает. Звездочка во вторых скобках допускает отсутствие соответствующей ей точки, которая спокойно влезает в шаблон первой скобки.
Дык, что ж ты сразу регэксп не привел 16.12.05 11:45  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
while (<>) {
#	s#((?:http|ftp|https)://.*?)([\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	s#((?:http|ftp|https)://.*?)(\.*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi;
	print;
}

---

Выкусываем любое количество точек перед терминальными символами. Проверил - работает

> Что касается изменения при записи, я все же предпочитаю
> хранить оригинал, сохраняя гибкость на случай будущих

Поддерживаю
а, ну да 16.12.05 14:23  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Только $text =~ s#((?:http|ftp|https)://.*?)([.,]*[\s()"'\\<>\[\]])#<a href="$1" target=_blank>$1</a>$2#gi; - запятые тоже попадаются
Не если уж вычищать :-) 16.12.05 15:45  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Только $text =~
> s#((?:http|ftp|https)://.*?)([.,]*[\s()"'\\<>\[\]])#&
> lt;a href="$1" target=_blank>$1</a>$2#gi; -
> запятые тоже попадаются

То ".*?" не лучше ли заменить на ".+"
Это если я правильно понял, что имелось в виду
ну тут уже не очень принципиально, + или * 16.12.05 18:11  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
А вот вопросительный знак критичен - в этом контексте он отключает "жадность" регекспа, заставляя выбирать самую короткую пододящую строчку.
А-а-а. Точно. Забыл 19.12.05 12:35  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
На самом деле я не строитель, а каску я на стройке украл :-)
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach