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

时间:2012-09-12 18:51:46

标签: php regex hyperlink

  

可能重复:
  Replace URLs in text with HTML links

我正在编写一些代码来将纯文本链接转换为PHP中的超文本链接。我正在使用正则表达式(我几乎什么都不知道)并且我遇到了一些问题:

  1. 我不知道如何在条件
  2. 中有条件地包含/排除某个项目
  3. 我不知道如何在我的表达式中包含网址参数
  4. 我对RegEx不太了解!
  5. 这是我写的代码:

    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并将其转换为可点击的链接。

1 个答案:

答案 0 :(得分:0)

您无需调整正则表达式:

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://