Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | | | | | | | | |
Дык, что ж ты сразу регэксп не привел 16.12.05 11:45 Число просмотров: 3723
Автор: 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;
}
---
Выкусываем любое количество точек перед терминальными символами. Проверил - работает
> Что касается изменения при записи, я все же предпочитаю > хранить оригинал, сохраняя гибкость на случай будущих
Поддерживаю
|
<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>
|
|
| | |
дело в том, что точка - это вполне разрешенная часть 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
|
На самом деле я не строитель, а каску я на стройке украл :-)
|
|
|