Преобразование URL-адресов из текста в ссылки, даже если нет протокола

Предположим, что $content — это содержимое текстовой области

/*Convert the http/https to link */
     $content = preg_replace('!((https://|http://)+[a-z0-9_./?=&-]+)!i', '$1 ', nl2br($_POST['helpcontent'])." ");
/*Convert the www. to link prepending http://*/
     $content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '$1 ', $content." ");

Это работало нормально для ссылок, но выяснилось, что это нарушает разметку, когда изображение находится внутри текста...

Я сейчас так пытаюсь:

$content = preg_replace('!\s((https?://|http://)+[a-z0-9_./?=&-]+)!i', ' $1 ', nl2br($_POST['content'])." ");
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '$1 ', $content." ");

Поскольку изображения уважаются, но проблема в том, что URL-адреса с форматом http :// или https :// теперь не будут преобразованы..:

google.com -> Not converted (as expected)

www.google.com -> Well Converted

http://google.com -> Not converted (unexpected)

https://google.com -> Not converted (unexpected)

Что мне не хватает?

-РЕДАКТИРОВАТЬ-

Текущее почти рабочее решение:

$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' $2 ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '$2 ', $content." ");

Дело в том, что если это ввод:

www.funcook.com http://www.funcook.com https://www.funcook.com funcook.com http://funcook.com https://funcook.com

Все URL-адреса, которые я хочу (, все, кроме name.domain ), преобразуются, как и ожидалось, но это результат

www.funcook.com http://www.funcook.com https://www.funcook.com ; funcook.com http://funcook.com https://funcook.com

Обратите внимание на ; вставляется, есть идеи, почему?

6
задан Toni Michel Caubet 30 July 2012 в 21:53
поделиться