在PHP中将纯文本链接转换为HyperLink


Convert plain-text link to HyperLink in PHP

可能重复:
用HTML链接替换文本中的URL

我正在编写一些代码,用PHP将纯文本链接转换为超文本链接。我正在使用一个正则表达式(我对它几乎一无所知),我遇到了一些问题:

  1. 我不知道如何在表达式中有条件地包含/排除项
  2. 我不知道如何在表达式中包含URL参数
  3. 我对RegEx了解不多

这是我写的代码:

function text2link($text) 
{
    $text = preg_replace
    (
        "/(ftp'.|www'.|http:'/'/|https:'/'/|)(.*)('.)(com|net|co'.uk)/i", 
        "<a href='http://$2$3$4' target='_blank'>$1$2$3$4</a>", 
        $text
    );
    return $text;
}

此代码将转换以下超链接的"样式":

http://www.google.com
www.google.com
google.com

等等。,然而,链接被强制为HTTP。无论您键入什么,表达式都会强制HTTP。是否可以有条件地包括必要的协议?例如:

"<a href='[SOME IF-CONDITION GOES HERE TO DECIDE WHAT PROTOCOL TO USE]$2$3$4' target='_blank'>$1$2$3$4</a>",

这种情况大致如下:

if $1 == "http, else if $1 == "https", else if $1 == "ftp", 

等等。,等

此外,我意识到我还没有考虑到足够多的扩展,这只是现在的测试代码。

编辑:我需要注意的是,我并不是在寻找需要200行的"防傻"、牢不可破的解决方案。我不介意一些晦涩难懂的领域不被人发现。我只想检测到最常见的域和URL,并将其转换为可点击的链接。

您不需要调整正则表达式:

function text2link($text, $protocol="http://") 
{
    $text = preg_replace
    (
        "/(ftp'.|www'.|http:'/'/|https:'/'/|)(.*)('.)(com|net|co'.uk)/i", 
        "<a href='$protocol$2$3$4' target='_blank'>$1$2$3$4</a>", 
        $text
    );
    return $text;
}

您可以传入一个可选协议作为第二个参数,如果不传入,它将默认为http://