将文本字符串中的任何url替换为使用php的可单击链接

mrp*_*atg 6 php regex

说我有一串文字,如

$text = "Hello world, be sure to visit http://whatever.com today";
Run Code Online (Sandbox Code Playgroud)

我怎么能(可能使用正则表达式)插入链接的锚标记(显示链接本身作为链接文本)?

Iva*_*uev 17

您可以使用regexp执行此操作:

$html_links = preg_replace('"\b(https?://\S+)"', '<a href="$1">$1</a>', $text);
Run Code Online (Sandbox Code Playgroud)


Erw*_*wan 5

我写了这个函数。它替换字符串中的所有链接。链接可以采用以下格式:

第二个参数是链接的目标('_blank'、'_top'...可以设置为false)。希望能帮助到你...

public static function makeLinks($str, $target='_blank')
{
    if ($target)
    {
        $target = ' target="'.$target.'"';
    }
    else
    {
        $target = '';
    }
    // find and replace link
    $str = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.~]*(\?\S+)?)?)*)@', '<a href="$1" '.$target.'>$1</a>', $str);
    // add "http://" if not set
    $str = preg_replace('/<a\s[^>]*href\s*=\s*"((?!https?:\/\/)[^"]*)"[^>]*>/i', '<a href="http://$1" '.$target.'>', $str);
    return $str;
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加波浪号以使网址更好地工作https://regexr.com/5m16v