将网址转换为可点击的链接 - domain.com/foo/bar

时间:2012-07-23 08:21:21

标签: php regex

我有一个包含一些链接的字符串。我需要将它们转换为可点击的链接,但问题是很多这些都不是以http或www开头的。如何在不会​​无意中影响其余字符串的情况下转换它们?

示例字符串:http://pastebin.com/bMe9pGbv

2 个答案:

答案 0 :(得分:1)

首先,我们需要从文本中隔离所有链接。我们假设链接没有空格,因此我们使用空格作为分隔符创建一个explode的数组:

$rows = explode(' ', $text);

然后,我们从每一行开始识别链接,添加http://(如果缺少)并添加<a>标记:

foreach ($rows AS $key => $row) {
    if (preg_match("@^[^\.\n]+\.[^ \n]+$@", $row)) {
        if (!preg_match('@^http://@', $row)) {
            $row = 'http://' . $row;
        }

        $rows[$key] = '<a href="'.$row.'">'.$row.'</a>';
    }
}

最后,我们使用implodespace作为分隔符重建文本:

$text = implode(' ', $rows);

答案 1 :(得分:-1)

这是我的检测实际网址(从方案开始)并将其替换为<a>的解决方案。

<?php
echo preg_replace(
    "/(http:\/\/|ftp:\/\/|https:\/\/)([^\s,]*)/i",
    "<a href=\"$1$2\">$1$2</a>",
    $input
);

检测不以方案开头的任意可点击链接需要更复杂的正则表达式和更多猜测。