我想知道是否有办法从网址获取网站名称。我知道你可以解析一个URL来获取域名,但是由于站点名称在代码方面没有标准化,我很怀疑。
如何使用这个例子就是说我要链接到纽约时报的一篇文章。我可以将文章的标题链接到文章页面。然后我可能希望有源,“纽约时报”显示在文章的标题旁边。如果我可以自动生成它,那将非常方便。
只是获取页面标题不起作用,因为这通常会给你文章标题,或者,如果你要链接到其他类型的页面,你可能会得到一些字符串,如“如何检索网站名称? - 堆栈溢出。”我只想获得“Stack Overflow”的一部分。
有什么想法吗?
答案 0 :(得分:1)
您可以尝试使用application-name属性:
<meta name="application-name" content="The New York Times" />
也
<meta name="application-name" content="CNN"/>
并非每个网站都有此功能,但您可以从此处开始,检查开放图形标记(http://ogp.me)等。
答案 1 :(得分:0)
如果要解析网址,可以尝试以下功能:
$parsedUrl = parse_url($url);
$host = $parsedUrl['host']
echo $host;
这将为您提供一个关联数组,其中host
键是您正在寻找的。 p>
答案 2 :(得分:0)
您所谓的“网站名称”不是链接的一部分,它是该链接返回的HTML代码的一部分。
如果您想获取网站标题,则应使用CURL检索链接内容,然后解析返回的HTML以获取该部分中标记的内容。
这可能会比您获得的好处更费力。
答案 3 :(得分:0)
您需要使用DOMDocument解析DOM树:
<?php
function GetTitle($url)
{
$dom = new DOMDocument;
@$dom->loadHTMLFile($url); // @ supresses warnings
// try to get meta application-name
foreach ($dom->getElementsByTagName("meta") as $meta)
{
$metaName = $meta->attributes->getNamedItem("name");
if (strtolower($metaName->nodeValue) == "application-name")
{
$metaContent = $meta->attributes->getNamedItem("content");
if ($metaContent != NULL)
return $metaContent->nodeValue;
}
}
// title fallback:
foreach ($dom->getElementsByTagName("title") as $title)
return $title->nodeValue;
return NULL;
}
print(GetTitle("http://www.nytimes.com/"));
?>
首先,GetTitle()
查找<meta name="application-name">
标记。如果找不到,它将回退并返回页面标题。
此外,您应该传递基本网址。 F.E.如果您有此网址:http://stackoverflow.com/questions/16185145/how-to-retrieve-website-names/16185654#16185654
,则应使用parse_url删除http://stackoverflow.com
以外的所有内容:
$parsedUrl = parse_url($url);
GetTitle($parsedUrl["scheme"] + "://" + $parsedUrl["host"]);