Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Замена ссылок


Автор: ziga 22.1.2011, 17:58
Есть текст, он грузится из базы и выводится как есть

Код

аывт олавты авы авы 
а выа выа ыва 
ав ыаыв а выа выа ыв

http://newsmusic.ru/news_3_20081.htm 
http://mainpeople.ru/photo/9/Zvezdnoe_prepati_Italia_Ocean_Cup_2010:1/ 
http://www.newsmusic.ru/news_3_19753.htm


как мне эти ссылки привести к такому виду? что бы уже при выводе в HTML они выглядили как ссылки а не как текст?

Код

аывт олавты авы авы 
а выа выа ыва 
ав ыаыв а выа выа ыв

<A href = 'http://newsmusic.ru/news_3_20081.htm'>http://newsmusic.ru</a>
<A href = 'http://mainpeople.ru/photo/9/Zvezdnoe_prepati_Italia_Ocean_Cup_2010:1/ >http://mainpeople.ru</a>
<A href = 'http://www.newsmusic.ru/news_3_19753.htm'>http://www.newsmusic.ru</a>


может уже есть у каво готовое решение?

Автор: ziga 25.1.2011, 12:44
Может хоть кто идею подскажет как это реализовать? 

Автор: Shogun 25.1.2011, 13:26
preg_replace_all

Автор: The_Aleksey 25.1.2011, 16:33
Цитата

preg_replace_all

Идея правильная, только с all - это preg_match)
А вот реализация:
Код

$search=array(
"/(http:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/",
"/(https:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/",
"/(ftp:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/"
);
$replace=array(
"<a target=\"_blank\" href=\"$1\">$1</a>",            
"<a target=\"_blank\" href=\"$1\">$1</a>",
"<a target=\"_blank\" href=\"$1\">$1</a>"
);
$output=preg_replace($search, $replace, $some_text);


лишнее можно убрать

Автор: ziga 25.1.2011, 22:08
не умею работать с регулярными выражениями подскажите как в условия включить ":desc" ? а то ссылку 

http://dom2.ru/community/rubric/buzproject/video/38703068?order=date:desc не до конца переделал smile
а так же bar/photo/140805#go-photo конец после # не включил

Автор: Addmin 26.1.2011, 08:04
Просто PHP вырвало на середине ссылки на Дом-2 smile

Можно сделать простой посимвольный парсер, который начинает заносить в массив значение, как только найдёт "http" и заканчивает на пробеле или символе новой строки "\n".

Автор: skyboy 26.1.2011, 09:22
Цитата(The_Aleksey @  25.1.2011,  15:33 Найти цитируемый пост)
$search=array(
"/(http:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/",
"/(https:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/",
"/(ftp:\/\/[a-zA-Z\.\-\/?&_%=0-9]+)/"
);

заменяем
Код

$search = '#(f|ht)tps?://[a-z0-9.,_#%&?+-]+#i';

так читаемее будет smile
между квадратными скобками - список символов, которые твоя логика относит к телу url'a. можно почитать RFC, чтоб знать, какие символы могут быть и в каком порядке(к примеру, доменное имя не начинается с точки), но можно следить за процессом и просто добавлять символы, на которых замена "спотыкается" в этот самый список между квадратными скобками.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)