-3

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

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

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

这是我写的代码:

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

4

1 回答 1

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://你可以传入一个可选协议作为第二个参数,如果你不这样做,它将默认为。

于 2012-09-12T18:55:29.643 回答