Задача - правильно преобразовать URL'ы в тексте с попощью regexp

TerminusMKB

Новичок
Задача - правильно преобразовать URL'ы в тексте с попощью regexp

Приветствую!
Вот возникла задача обрезки регулярным выражением длинных url'ов в тексте таким образом, чтобы из, например,
http://asdfasdfsdfsdffasdfsdfsfsefaewf.ru получилось http://dsdf...ewf.ru
Т.е. задача - обрезать урлы, если они длиннее, допустим, 50 символов...

Пробовал по-всякому. Пробовал юзать preg_replace('что-то',eval('процедуры обработки'),$content), но с eval тоже ничего не удалось :(

В крайнем случае, подойдет даже просто обрезка с конца с подстановкой троеточия на конце. НО. Проблема в постановке условий, т.к. не надо обрезать короткие урлы... Подскажите, плз, есть ли простой выход из ситуации :)

И второй нюанс. На ряде форумов есть баг. Если URL заканчивается точкой (например, стоит в конце предложения), то форум преобразовывает в ссылке url вместе с завершающей точкой. Как бы от этого избавиться? Хотя не страшно, конечно, но неприятно...


P.S.: Биг сори - топик кинул не в томт раздел :(
 

TerminusMKB

Новичок
Увы, ищется функция и достаточно быстрая :(. Стоит задача именно преобразования URL'ов в кликабельные href'ы без дополнительной нагрузки в виде html вставок...
 

Gorynych

Посетитель PHP-Клуба
что-то типа такого:
Код:
$maxlength = 10;
$content = array(
    "http://asdfasdfsdfsdffasdfsdfsfsefaewf.ru",
    "http://phpclub.ru/talk/showthread.php?s=&threadid=90069",
    "http://phpclub.ru/talk/"
);
$pattern = array(
    "/^(http:\/\/)?(.{".$maxlength.",".$maxlength."})(.*)(\w{2,2}\.\w+|\b\w+)$/",
    "/^(http:\/\/)?(.{1,".($maxlength+3)."})(\..+)?$/"
);
$replace = array(
    "<a href=\"\\1\\2\\3\\4\\5\">http://\\2...\\4</a>",
    "<a href=\"\\1\\2\\3\">\\1\\2\\3</a>"
);

foreach($content as $src) {
    $dest = preg_replace($pattern, $replace, $src);
    print $src."\n".$dest."\n\n";
}
P.S. если подходит, то потестируйте на разных вариантах, я писал навскидку
 
Сверху