可能的重复项:
微调正则表达式以跳过标签
目前我的函数看起来像这样。它将纯文本URL转换为HTML链接。
function UrlsToLinks($text){
return preg_replace('@(https?://([-'w'.]+)+(:'d+)?(/(['w/_'.-]*('?'S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $text);
}
但是也存在一些问题。我试图做的是跳过现有链接、<img>
标签中的src
属性等。 无法弄清楚我需要在此函数中修改什么。
假设我们要替换的 URL 尚未在标记内,这将起作用。
function UrlsToLinks($text){
$matches = array();
$strippedText = strip_tags($text);
preg_match_all('@(https?://([-'w'.]+)+(:'d+)?(/(['w/_'.-]*('?'S+)?)?)?)@', $strippedText, $matches);
foreach ($matches[0] as $match) {
if (filter_var($match, FILTER_VALIDATE_URL)) {
$text = str_replace($match, '<a href="'.$match.'" target="_blank">'.$match.'</a>', $text);
}
}
return $text;
}