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
Форумы портала PHP.SU :: Версия для печати :: Замена ссылок в тексте
Форумы портала PHP.SU » PHP » Регулярные выражения » Замена ссылок в тексте

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

1. vanicon - 17 Января, 2012 - 20:44:51 - перейти к сообщению
Необходимо найти ссылки в тексте(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.  
2. LIME - 17 Января, 2012 - 22:00:00 - перейти к сообщению
как кто-то метко выразился как-то -чистим зубы через анус))
не обещаю что сразу заработает но как-то так
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);
3. vanicon - 18 Января, 2012 - 21:24:47 - перейти к сообщению
Цитата:
$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 символа , и # с запятой работает но вот с решеткой у меня просто выбивает апач (денвер).
Почему так происходит?
4. LIME - 18 Января, 2012 - 21:41:57 - перейти к сообщению
vanicon пишет:
у меня просто выбивает апач
что значит выбивает?
вардампите весь массив может поможет
ошибки в студию
5. vanicon - 18 Января, 2012 - 22:10:34 - перейти к сообщению
делаю так:
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...
6. LIME - 18 Января, 2012 - 22:35:15 - перейти к сообщению
vanicon возможно слишком сложная строка и память переполняет
это предположение
(Добавление)
самому интересно

 

Powered by ExBB FM 1.0 RC1