Метод ниже делает ссылки кликабельными. Это фильтр. Вы отправляете текстовую строку и ее конвертируете HTTP а также HTTPS в кликабельные ссылки.
/**
* Make clickable links from URLs in text.
*
*/
public function make_clickable($text) {
return preg_replace_callback(
'#\b(?<![href|src]=[\'"])https?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#',
create_function(
'$matches',
'return "<a href=\'{$matches[0]}\'>{$matches[0]}</a>";'
),$text);
}
Я хочу расширить этот метод, чтобы принять WWW а также (например, www.google.com), это возможно?
Заранее спасибо.
ОБНОВИТЬ
Ниже строка находит HTTP, HTTPS а также WWW, но ссылки с типом WWW неправильно HREF. Это ссылки на Webroot / www.test.com например.
'/((http[s]?:|www[.])[^\s]*)/'
РЕШЕНИЕ
/**
* Make clickable links from URLs in text.
*/
public function make_clickable($text) {
// Force http to www.
$text = preg_replace( "(www\.)", "http://www.", $text );
// Delete duplicates after force.
$text = preg_replace( "(http://http://www\.)", "http://www.", $text );
$text = preg_replace( "(https://http://www\.)", "https://www.", $text );
// The RegEx.
$regExUrl = "/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
// Check if there is a URL in the text.
if(preg_match($regExUrl, $text, $url)) {
// Make the URLs hyper links.
$text = preg_replace(
$regExUrl,
'<a href="' . $url[0] . '" rel="nofollow" target="_blank">' . $url[0] . '</a>',
$text
);
}
return $text;
}
У вас есть некоторые синтаксические ошибки (не удалось избежать /
). Во всяком случае, если вы хотите соответствовать www.
просто добавьте его в строку (не забывая .
, который является управляющим символом в противном случае)
preg_replace_callback(
'#\b(?<![href|src]=[\'"])(?:http(?:s|):\/\/|)(?:www\.|)[^\s()<>]+(?:\([\w\d]+\)|(?:[^[:punct:]\s]|\/))#', ...);
Других решений пока нет …