Примите http, https и www в методе фильтра ООП

Метод ниже делает ссылки кликабельными. Это фильтр. Вы отправляете текстовую строку и ее конвертируете 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;

}

1

Решение

У вас есть некоторые синтаксические ошибки (не удалось избежать /). Во всяком случае, если вы хотите соответствовать www. просто добавьте его в строку (не забывая ., который является управляющим символом в противном случае)

preg_replace_callback(
'#\b(?<![href|src]=[\'"])(?:http(?:s|):\/\/|)(?:www\.|)[^\s()<>]+(?:\([\w\d]+\)|(?:[^[:punct:]\s]|\/))#', ...);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]