2013-05-05 95 views
0

我需要自动解析字符串并查找是否存在到我的网站的链接,并自动用可链接的HTML链接替换地址。PHP:正确地将地址转换为字符串中的可链接链接

假设我的网站都不会忽略+ 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必须链接,任何其他链接必须视为普通的纯文本。提前致谢!

+2

ereg_replace已被弃用的PHP 5.3.0的。依靠这个功能是非常不鼓励的。改为使用preg_replace – zavg 2013-05-05 23:14:58

回答

2

第一条建议,远离ereg,它已被弃用了很长时间。其次,你可以谷歌和试验来编写一个适合你的表达式,这样可以调整我在这里的内容以满足你的需求。

我能够把一个相当简单的正则表达式模式放在一起来搜索URL。

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

一旦你的网址,我建议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>'; 
}