PHP: обнаружение URL (регулярное выражение) включает разрывы строк - PullRequest
2 голосов
/ 16 мая 2010

Я хочу иметь функцию, которая получает текст в качестве входных данных и возвращает текст с URL-адресами, сделанными для ссылок HTML в качестве выходных данных.

Мой проект выглядит следующим образом:

function autoLink($text) {
    return preg_replace('/https?:\/\/[\S]+/i', '<a href="\0">\0</a>', $text);
}

Но это не работает должным образом.

Для ввода текста, который содержит ...

http://www.google.de/

... Я получаю следующий вывод:

<a href="http://www.google.de/<br">http://www.google.de/<br</a> />

Почему оно включает разрывы строк? Как я могу ограничить его реальным URL?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 16 мая 2010

Ну, < не является пробельным символом, поэтому соответствует [\S]. Вы можете исключить его из вашего набора принятых символов:

preg_replace('/https?:\/\/[^\s<]+/i', '<a href="\0">\0</a>', $text);
1 голос
/ 16 мая 2010

Как насчет использования URL Грубера Regex ?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...