|
|
|
| Здравствуйте!
Задача такая: требуется подсветить ссылки вида
http://www.yandex.ru | http://yandex.ru | www.yandex.ru | yandex.ru
делаю так:
заменяю на
<a href="http://\\2">\\2</a>
|
но при этом заменяются и ссылки в [url][/url] :(((
пробую как-то так:
"/(^[url=http:\/\/|www)(\S+)[\/url]/i"
|
понимаю что это полная чушь, а как исправить никак не догадываюсь (((
помогите, пожалуйста... спасибо! :))) | |
|
|
|
|
|
|
|
для: afdm
(16.01.2008 в 20:39)
| | никто не поможет??? :((( | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 12:36)
| | давайте лучше пример текста. А то я не очень понял задачу. | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 13:03)
| | ну вот например смотрите:
есть текст, в котором есть ссылки на http://www.yandex.ru, например. Или вот такие http://yandex.ru (без www), ну или такие www.yandex.ru (без протокола).
А ещё есть bb-коды: [url][/url]. В них тоже могут быть вот такие вот ссылки [url] www.yandex.ru [/url] например.
В результате должно получиться вот что:
есть текст, в котором есть ссылки на http://www.yandex.ru, например. Или вот такие http://yandex.ru (без www), ну или такие [url]www.yandex.ru[/url] (без протокола).
А ещё есть bb-коды: [url][/url]. В них тоже могут быть вот такие вот ссылки [url]www.yandex.ru[/url] например.
Т.е. все ссылки должны автоматически подсветиться.
Но вышеприведенный код не работает должным образом, т.к. кроме обычнх ссылок в тексте, подсвечивается содержимое bb-url-тэгов :(((
PS кстати, как посоветуете исправить след. рег. выражение на предмет безопасности?
$search = array("/\[url=(['\"]?)(www\.)([^\"']*)\\1](.*)\[\/url\]/siU",
"/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/siU",
"/\[url](www\.)([^\"]*)\[\/url\]/siU",
"/\[url]([^\"]*)\[\/url\]/siU",
"#\[b\](.*?)\[/b\]#is",
"#\[i\](.*?)\[/i\]#is",
"#\[u\](.*?)\[/u\]#is",
"#\[s\](.*?)\[/s\]#is");
$replace = array("<a href=\"http://www.\\3\">\\4</a>",
"<a href=\"\\2\">\\3</a>",
"<a href=\"http://www.\\2\">\\2\\3</a>",
"<a href=\"\\1\">\\1</a>",
"<b>\\1</b>",
"<i>\\1</i>",
"<u>\\1</u>",
"<s>\\1</s>");
|
???
Заранее большое спасибо! :))) | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 14:31)
| | Собственно решения я вижу такое
Сначала прогнать парсинг bbcode
все обработанные url у вас находятся в кавычках: href="url" или между тегами ><
То есть надо к регулярному выражению добавить что url не может начинаться с кавычки или >. То есть либо не кавычка и не >, либо начало строки:
(^|[^>"])и далее регулярка
|
| |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 15:44)
| | спасибо! попробую!!! если что - напишу :))) | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 15:44)
| | спасибо! попробую!!! если что - напишу :))) | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 15:44)
| | Тогда перед ссылкой после замены будет не достовать символа... который под [^>"] попадет.
Наверное надо вот так сделать: (?<![>"])и далее регулярка
PS Вместо кавычек и >, наверное, надо ] - это форум bb тег проглотил... | |
|
|
|
|
|
|
|
для: kasmanaft
(17.01.2008 в 17:20)
| | а символ который захапали перед URL надо на место вернуть:) на то он в группе и находится.
>наверное, надо ]
я первой строчкой написал, что cначала надо отпарсить bbcode. Как раз чтобы всяких значащих [] не оставалось | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 17:33)
| | спасибо :))) на 50% работает :(((
а если пользователь вводит ссылку вида <a href="http://www.yandex.ru">yandex</a> ???
в результате нижеприведённое выражение преобразует подобные ссылки в нечно ужасно:
<a href="http://www.ya.ru">ya.ru</a> (часть после <a href= - уже гиперссылка... :(((
как тогда исправить вот это рег выражение?
<?
"#(?<![>\"])(?<!\[url=)http://((?>[^\s\[\]]+))(?!\s*\[\/url\])#i"
/* заменяю на */
"<a href=\"http://\\1\">http://\\1</a>"
|
заранее вам спасибо! :))) | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 21:56)
| | Должно работать...
<?php
$text = 'text [ url=http://yandex.ru]yandex[/url] text [ url]http://yandex.ru[/url] text
text http://yandex.ru text <a href="http://www.yandex.ru">yandex</a>';
$pattern = "#(?<![>\"])(?<!\[url=)http://((?>[^\s\[\]]+))(?!\s*\[\/url\])#i";
$replacement = "<a href=\"http://\\1\">http://\\1</a>";
echo preg_replace($pattern, $replacement, $text);
/* на выходе
text [ url=http://yandex.ru]yandex[/url] text [ url]http://yandex.ru[/url] text
text <a href="http://yandex.ru">http://yandex.ru</a> text <a href="http://www.yandex.ru">yandex</a>
*/
?>
|
PS перед url, конечно, пробела нет.. это чтобы форум не съел бб тег. | |
|
|
|
|
|
|
|
для: kasmanaft
(18.01.2008 в 10:09)
| | спасибо, друг!!!!!!!!!!!!!!!! :)))))))))))))))))) я почти так же написал... где-то немного осталось... щас всё просмотрю :))))))))))))))
ЗЫ кстати, поздравляю!!! Скоро Ваш порядковый номер (2777) совпадёт с кол-вом сообщений (уже 2707) :)))) | |
|
|
|
|
|
|
|
для: afdm
(18.01.2008 в 14:51)
| | :((( неа, всё-таки не полностью работает :(((
в обычной ссылке:
<a href="http://www.ya.ru">ya.ru</a>
после <a href=" всё остальное преобразуется в ссылку, причем очень некорректную :((((((((((
http://www.ya.ru">ya.ru</a> | |
|
|
|
|
|
|
|
для: afdm
(18.01.2008 в 15:18)
| | Не может быть... покажите код.
Если в мой код вставить этот урл, работает? У меня вроде работает...
> cкоро номер совпадёт с кол-вом сообщений
Жду, не дождусь :)) Как бы не прозевать) | |
|
|
|
|
|
|
|
для: kasmanaft
(18.01.2008 в 18:13)
| | да, действительно! извините! щас разберусь :))) опять наверное где-нибудь что-нибудь забыл :))))) ещё раз извините и спасибо огромное за помощь!!! | |
|
|
|