在页面中查找链接并通过自定义功能运行它

时间:2011-10-03 01:44:05

标签: php regex url

function link_it($text)
{
    $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" target=\"_blank\">$3</a>", $text);  
    $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" target=\"_blank\">$3</a>", $text);  
    $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\" target=\"_blank\">$2@$3</a>", $text);  
    return($text);  
}

这是工作代码。

我正在开发一项新功能

function shorturl2full($url)
{
    echo 'URL IS: ' . $url;
    return "FULLLINK";
}

我们的想法是把网址拿回来。后来打算把它变成完整的URL。因此,t.co将会显示完整的网址。

$text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" target=\"_blank\">" .  shorturl2full("$3") . "</a>", $text);  
        $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" target=\"_blank\">" .  shorturl2full("$3") . "</a>", $text);  
        $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\" target=\"_blank\">$2@$3</a>", $text);  
        return($text);  
}

我的不好尝试。

因此,如果您点击链接,它应该使用原始链接,但您看到的应该是shorturl2full的输出

就像<a href="t.co">FULLLINK</a>

一样

我想尝试自己编写shorturl2full函数,我想我对如何做这个有很好的想法。问题出在link_it函数中......它需要将url传递给shorturl2full函数并显示它返回的内容。

2 个答案:

答案 0 :(得分:2)

您可以使用preg_replace_callback而不是preg_replace http://nz.php.net/manual/en/function.preg-replace-callback.php

function link_it($text)
{
    $text= preg_replace_callback("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is",  'shorturl2full', $text);  
    $text= preg_replace_callback("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is",  'shorturl2full', $text);  
    $text= preg_replace_callback("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i",  'shorturl2full', $text);  
    return($text);  
}

function shorturl2full($url)
{
    $fullLink = 'FULLLINK';
    // $url[0] is the complete match
    //... you code to find the full link
    return '<a href="' . $url[0] . '">' . $fullLink . '</a>';
}

希望这有帮助

答案 1 :(得分:0)

previous answer中我展示了一个名为make_clickable的函数,该函数有一个可选的回调参数,如果设置了,它将应用于每个URI:

make_clickable($text, 'shorturl2full');

也许它有用或者至少提供一些想法。