我有一个PHP函数,它接受一个传递的url并创建一个干净的链接。它将完整的链接放在锚点标签中,并只显示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;
}
?>
我的正则表达式技能不是很强,所以非常感谢任何帮助。
看看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也会起作用,而且更简洁,我将把它留在这里,以展示一个替代解决方案,如果您愿意,它不需要调用regex引擎。
这将获得域名减去www
:
$url = preg_replace('/^www./', '', parse_url($url, PHP_URL_HOST));
正则表达式中的^
表示仅从字符串的开头删除www
工作示例:http://codepad.org/FTNikw8g