如何检索网站名称?

时间:2013-04-24 06:45:51

标签: php html title

我想知道是否有办法从网址获取网站名称。我知道你可以解析一个URL来获取域名,但是由于站点名称在代码方面没有标准化,我很怀疑。

如何使用这个例子就是说我要链接到纽约时报的一篇文章。我可以将文章的标题链接到文章页面。然后我可能希望有源,“纽约时报”显示在文章的标题旁边。如果我可以自动生成它,那将非常方便。

只是获取页面标题不起作用,因为这通常会给你文章标题,或者,如果你要链接到其他类型的页面,你可能会得到一些字符串,如“如何检索网站名称? - 堆栈溢出。”我只想获得“Stack Overflow”的一部分。

有什么想法吗?

4 个答案:

答案 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键是您正在寻找的。

请参阅:http://php.net/manual/en/function.parse-url.php

答案 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"]);