-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 に答える