0

我需要自动解析一个字符串并查找是否存在指向我的网站的链接,自动将地址替换为可点击的 HTML 链接。

假设我的网站地址是 www.mysite.com + wap.mysite.com + m.mysite.com,我需要转换:

My pictures at m.mysite.com/user/id are great.

至:

My pictures at <a href="/user/id" target="_blank">mysite.com/user/id</a> are great.

问题是如何做到这一点(使用 ereg_replace?)而不是使用大量代码行

请注意,结果必须是相对 URL,以便将当前协议和子域用于目标链接。如果用户在 HTTPS 版本的 m 子域中,则目标将是 HTTPS 协议的 m 子域,依此类推。只有指向 mysite.com 的链接必须被链接,任何其他链接必须被视为普通纯文本。提前致谢!

4

1 回答 1

2

第一条建议,远离ereg,它已经被弃用了很长时间。其次,您可能可以通过谷歌搜索并尝试构建一个适合您的preg表达式,因此请调整我在这里的内容以满足您的需求。

我能够组合一个相当简单的正则表达式模式来搜索 URL。

preg_match("/m.mysite.com\S+/", $str, $matches);

获得 URL 后,我建议使用parse_url而不是正则表达式。

这是代码

$sSampleInput = 'My pictures at http://m.mysite.com/user/id are great.';

// Search for URLs but don't look for the scheme, we'll add that later
preg_match("/m.mysite.com\S+/", $sSampleInput, $aMatches);

$aResults = array();
foreach($aMatches as $sUrl) {
    // Tack a scheme afront the URL
    $sUrl = 'http://' . $sUrl;

    // Try validating the URL, requiring host & path
    if(!filter_var(
        $sUrl,
        FILTER_VALIDATE_URL,
        FILTER_FLAG_HOST_REQUIRED|FILTER_FLAG_PATH_REQUIRED)) {
        trigger_error('Invalid URL: ' . $sUrl . PHP_EOL);
        continue;
    } else
        $aResults[] =
            '<a href="' . parse_url($sUrl, PHP_URL_PATH) .
            '" target="_blank">' . $sUrl . '</a>';
}
于 2013-05-05T23:35:16.287 回答