我有一个PHP函数,它接受传递的url并创建一个干净的链接。它将完整链接放在锚标记中,并从网址中显示“www.domain.com”。它运作良好但我想修改它,因此它删除了“www。”。部分也是如此。
<?php
// pass a url like: http://www.yelp.com/biz/my-business-name
// should return: <a href="http://www.yelp.com/biz/my-business-name">yelp.com</a>
function formatURL($url, $target=FALSE) {
if ($target) { $anchor_tag = "<a href=\"\\0\" target=\"$target\">\\4</a>"; }
else { $anchor_tag = "<a href=\"\\0\">\\4</a>"; }
$return_link = preg_replace("`(http|ftp)+(s)?:(//)((\w|\.|\-|_)+)(/)?(\S+)?`i", $anchor_tag, $url);
return $return_link;
}
?>
我的正则表达能力并不强,所以任何帮助都非常感激。
答案 0 :(得分:4)
看看parse_url:http://us2.php.net/manual/en/function.parse-url.php
这将简化您的逻辑,可以更换www。一个简单的字符串替换。
$link = 'http://www.yelp.com/biz/my-business-name';
$hostname = parse_url($link, PHP_URL_HOST));
if(strpos($hostname, 'www.') === 0)
{
$hostname = substr($hostname, 4);
}
我已修改原始答案,以便在评论中说明问题。下面帖子中的preg_replace也可以工作,并且更加简洁,我将在这里留下这个,以显示一个替代解决方案,如果你愿意,不需要调用正则表达式引擎。
答案 1 :(得分:2)
这将使您的域名减去www
:
$url = preg_replace('/^www./', '', parse_url($url, PHP_URL_HOST));
正则表达式中的 ^
表示只从字符串的开头删除www