-2

可能重复:
微调正则表达式以跳过标签

目前我的功能看起来像这样。它将纯文本 URL 转换为 HTML 链接。

function UrlsToLinks($text){
    return preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $text);
}

但也有一些问题。我想要做的是跳过现有的链接、标签中的src属性<img>等。无法弄清楚我需要在这个函数中修改什么。

4

1 回答 1

1

假设我们要替换的 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;
}
于 2012-08-14T20:04:28.860 回答