Нахождение и замена url в тексте.

Venom

Guest
Нахождение и замена url в тексте.

Я понимаю, что тема старая и избитая, что уже дано много десятков всяких вариантов, но универсального я так и не нашёл, что в инете, что на этом форуме все не то. Зашёл тут на php.spb.ru и нашёл вот эту статейку http://php.spb.ru/php/url2.html она мне не очень подходил в плане интеграции в скрипт, но всё таки я переделал её слеганца, вроде бы на этом и все должно было бы и закончиться функция со своими делами справляется всё норм, НО в ней есть такой очень существенный не достаток имена файло с расширением она опознаёт как url, что мне категорически не нужно. Помогите исправить этот недочёт.
Вот код функции с моими исправлениями:
PHP:
function char_register ($str)
 {
  $str = strtoupper($str);
  $str = strtr($str,"абвгдеёжзийклмнопрстуфхцчшщъыьэюя","АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ");
  return $str;
 }
function change_url ($str)
 {
  $str = $str." ";
  $str = str_replace ("<br>", " <br>", $str);
  preg_match_all("/(http:\\/\\/)?([a-z_0-9-.]+\\.[a-z]{2,3}(([ \"'>\r\n\t])|(\\/([^ \"'>\r\n\t]*)?)))/", $str, $url);
  for($i=0; $i<count($url[2]); $i++)
   {
    $str_upper = char_register($str);
    $ulr_upper = char_register($url[1][$i].$url[2][$i]);
    $place = strpos ($str_upper, $ulr_upper);
    $url[2][$i] = trim($url[2][$i]);
    $str = substr_replace ($str, "<a href=\"http://".$url[2][$i]."\">".$url[2][$i]."</a>", $place, max (strlen ($url[1][$i].$url[2][$i]), strlen ($url[1][$i].$url[2][$i])));
   }
  $str = str_replace (" <br>", "<br>", $str);
  $str = trim($str);
  return $str;
 }
echo change_url($text);
 

ForJest

- свежая кровь
на тебе ещё для размышлений
PHP:
<?php
$contents = "<a href='http://www.nagash.org?blah=supa&kama&dzhoba'>blah <b>blah</b>?</a>";
$contents = "<a href=\"http://www.nagash.ru?blah=zz'zz\"> some link </a>";
$contents = "<a href=http://www.nagash.ru?blah=zzzz>some link </a>";
$contents = '<a href="http://www.nagash.ru?blah=    zz">some link </a>';
$contents = '<a href="http://www.nagash.ru?blah=zz" title="cool link">some link </a>';
$contents = '<a name="abazaba></a><a href="abazaba2">test</a>';
//$contents = '<a  title="cool href= link" href="http://www.nagash.ru?blah=zz">link</a>';

$pattern = "~<a(.+?)href[\s\r\n]*=[\s\r\n]*(((['\"])([^\\4>]*?)\\4)|([^\s\n\r>]*))[^>]*>[^<]*</a>~si";
//$pattern = "~<a((.+?)(href|name)\s*=\s*(\'|\"){0,1}\s*((.*?)(\\4){0,1}\s*)\s*)>~si";

preg_match($pattern, $contents, $matches);
print_r($matches);
?>
 

Venom

Guest
Автор оригинала: ForJest
на тебе ещё для размышлений
PHP:
<?php
$contents = "<a href='http://www.nagash.org?blah=supa&kama&dzhoba'>blah <b>blah</b>?</a>";
$contents = "<a href=\"http://www.nagash.ru?blah=zz'zz\"> some link </a>";
$contents = "<a href=http://www.nagash.ru?blah=zzzz>some link </a>";
$contents = '<a href="http://www.nagash.ru?blah=    zz">some link </a>';
$contents = '<a href="http://www.nagash.ru?blah=zz" title="cool link">some link </a>';
$contents = '<a name="abazaba></a><a href="abazaba2">test</a>';
//$contents = '<a  title="cool href= link" href="http://www.nagash.ru?blah=zz">link</a>';

$pattern = "~<a(.+?)href[\s\r\n]*=[\s\r\n]*(((['\"])([^\\4>]*?)\\4)|([^\s\n\r>]*))[^>]*>[^<]*</a>~si";
//$pattern = "~<a((.+?)(href|name)\s*=\s*(\'|\"){0,1}\s*((.*?)(\\4){0,1}\s*)\s*)>~si";

preg_match($pattern, $contents, $matches);
print_r($matches);
?>
Это как я понимаю извлечение url из html кода, а мне надо наоборот url загнать в html, а для этого мне нужна функция, которая бесошибочно распознает url среди обычного текста.
 

ForJest

- свежая кровь
Venom
Безошибочно URL из <a ты не извлечёшь, в общем случае. В некотором ограниченном множестве случаев - да.
 

Venom

Guest
Автор оригинала: ForJest
Venom
Безошибочно URL из <a ты не извлечёшь, в общем случае. В некотором ограниченном множестве случаев - да.
Мне не из <a извеч надо. У другая задача. Есть текст например такой:
Код:
лабуда ла-ла-ла [url]www.phpclub.ru[/url] и снова лабуда ла-ла-ла
Мне надо что бы он с помощью этой функции превратился в
Код:
лабуда ла-ла-ла <a href="www.phpclub.ru">[url]www.phpclub.ru[/url]</a> и снова лабуда ла-ла-ла
 
Сверху