У меня есть простая система комментария, где люди могут отправить гиперссылки в поле простого текста. Когда я отображаю эти записи назад от базы данных и в веб-страницу, что RegExp в PHP я могу использовать для преобразования этих ссылок в ссылки привязки типа HTML?
Я не хочу, чтобы алгоритм сделал это с любым другим видом ссылки, просто http и https.
Я не рекомендую делать много вещей на лету, как это. Я предпочитаю использовать простой интерфейс редактора, похожий на тот, что используется в стековом переполнении. Он называется Markdown.
.public static function makeClickableLinks($s) {
return preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $s);
}
<?
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");
?>
Что ж, ответ Воломике намного ближе. И чтобы продвинуться немного дальше, вот что я сделал, чтобы не учитывать завершающую точку в конце гиперссылок. Я также рассматривал фрагменты URI.
public static function makeClickableLinks($s) {
return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}