Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена ссылок в тексте

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vanicon
Отправлено: 17 Января, 2012 - 20:44:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Необходимо найти ссылки в тексте(http://site[dot]com/erer/3434 и www.site.com/ererer/32453) и заменить их на <noindex><a href="http://site.com/erer/3443" rel="nofollow">http://site.com</a></noindex> То есть ссылкой является только домен, а не вся ссылка. Довольно распространенная проблема, и в интернете много тем по этому поводу, и у меня тоже все получалось, но проблема получается в том когда ссылки в тексте одинаковые и тогда получается вообще неизвестно что, пробовал что то самостоятельно сделать, но так и не вышло...
Пример кода:
PHP:
скопировать код в буфер обмена
  1.  
  2. preg_match_all('/(http:\/\/)?([a-zA-Zа-яА-Я0-9\-.]+\.[a-zA-Zа-яА-Я0-9\-]+([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*)/',$text,$found);
  3. if($found[0][0] <> null){
  4. foreach($found[0] as $url){
  5. $text = str_replace($url, '<noindex><a href="'.$url.'" class="link" target="_blank" rel="nofollow">'.getHost($url).'</a></noindex>', $text);
  6. }
  7. }
  8.  
  9. function getHost($url) {
  10. $parseUrl = parse_url(trim($url));
  11. return trim($parseUrl[host] ? $parseUrl[host] : array_shift(explode('/', $parseUrl[path], 2)));
  12. }
  13.  


-----
Так было, так есть и так будет
 
 Top
LIME
Отправлено: 17 Января, 2012 - 22:00:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




как кто-то метко выразился как-то -чистим зубы через анус))
не обещаю что сразу заработает но как-то так
PHP:
скопировать код в буфер обмена
  1. $text=preg_replace('/((http:\/\/)?(([a-zA-Zа-яА-ЯёЁ0-9\-.]+\.[a-zA-Zа-яА-ЯёЁ0-9\-]+)([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*))/',
  2. '<noindex><a href="$1" class="link" target="_blank" rel="nofollow">$4</a></noindex>',$text);
 
 Top
vanicon
Отправлено: 18 Января, 2012 - 21:24:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Цитата:
$text=preg_replace('/((http:\/\/)?(([a-zA-Zа-яА-ЯёЁ0-9\-.]+\.[a-zA-Zа-яА-ЯёЁ0-9\-]+)([\/]([a-zA-Z0-9_\/\-.?&%=+])*)*))/',
'<noindex><a href="$1" class="link" target="_blank" rel="nofollow">$4</a></noindex>',$text);

Код рабочий, но некоторые ссылки он не разбирает в 4 маске регулярки, такие как ссылка на запрос гугла. Думаю что это из за не достатка спец символов в 4 маски, добавил туда 2 символа , и # с запятой работает но вот с решеткой у меня просто выбивает апач (денвер).
Почему так происходит?


-----
Так было, так есть и так будет
 
 Top
LIME
Отправлено: 18 Января, 2012 - 21:41:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




vanicon пишет:
у меня просто выбивает апач
что значит выбивает?
вардампите весь массив может поможет
ошибки в студию
 
 Top
vanicon
Отправлено: 18 Января, 2012 - 22:10:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




делаю так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $text = 'http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=preg_replace+%D0%B2+javascript#sclient=psy-ab&hl=ru&newwindow=1&source=hp&q=preg_replace+%D0%B8+%D1%81%D0%BF%D0%B5%D1%86%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B&pbx=1&oq=preg_replace+%D0%B8+%D1%81%D0%BF%D0%B5%D1%86%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B&aq=f&aqi=&aql=&gs_sm=e&gs_upl=10597l15274l5l15869l16l11l3l0l0l1l306l2834l0.1.8.2l13l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=addb1b4e00779162&biw=1440&bih=809';
  3. $text=preg_replace('/((http:\/\/)?(([a-zA-Zа-яА-ЯёЁ0-9\-.]+\.[a-zA-Zа-яА-ЯёЁ0-9\-]+)([\/]([a-zA-Z0-9_\/\-.?&%=+#])*)*))/','$4',$text);
  4.  

И ошибки как таковой не выводит, просто после этого исполнения скрипта, пишет во всплывающем окне прекращение работы apache причина из за модуля php 5.1...


-----
Так было, так есть и так будет
 
 Top
LIME
Отправлено: 18 Января, 2012 - 22:35:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




vanicon возможно слишком сложная строка и память переполняет
это предположение
(Добавление)
самому интересно
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB