PHP:正确地将地址转换为字符串中的可链接链接
问题描述:
我需要自动解析字符串并查找是否存在到我的网站的链接,并自动用可链接的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必须链接,任何其他链接必须视为普通的纯文本。提前致谢!
答
第一条建议,远离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>';
}
ereg_replace已被弃用的PHP 5.3.0的。依靠这个功能是非常不鼓励的。改为使用preg_replace – zavg 2013-05-05 23:14:58