Преобразуйте URL простого текста в гиперссылки HTML в PHP

У меня есть простая система комментария, где люди могут отправить гиперссылки в поле простого текста. Когда я отображаю эти записи назад от базы данных и в веб-страницу, что RegExp в PHP я могу использовать для преобразования этих ссылок в ссылки привязки типа HTML?

Я не хочу, чтобы алгоритм сделал это с любым другим видом ссылки, просто http и https.

56
задан random 6 November 2011 в 17:44
поделиться

4 ответа

Я не рекомендую делать много вещей на лету, как это. Я предпочитаю использовать простой интерфейс редактора, похожий на тот, что используется в стековом переполнении. Он называется Markdown.

.
1
ответ дан 26 November 2019 в 17:14
поделиться
public static function makeClickableLinks($s) {
    return preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $s);
}
2
ответ дан 26 November 2019 в 17:14
поделиться
<?
function makeClickableLinks($text)
{

        $text = html_entity_decode($text);
        $text = " ".$text;
        $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                '<a href="\\1" target=_blank>\\1</a>', $text);
        $text = eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                '<a href="\\1" target=_blank>\\1</a>', $text);
        $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
        '\\1<a href="http://\\2" target=_blank>\\2</a>', $text);
        $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',
        '<a href="mailto:\\1" target=_blank>\\1</a>', $text);
        return $text;
}

// Example Usage
echo makeClickableLinks("This is a test clickable link: http://www.websewak.com  You can also try using an email address like test@websewak.com");
?>
8
ответ дан 26 November 2019 в 17:14
поделиться

Что ж, ответ Воломике намного ближе. И чтобы продвинуться немного дальше, вот что я сделал, чтобы не учитывать завершающую точку в конце гиперссылок. Я также рассматривал фрагменты URI.

public static function makeClickableLinks($s) {
  return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}
39
ответ дан 26 November 2019 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: