选择两种类型的元标记

时间:2012-04-01 22:02:44

标签: php opengraph meta-tags metatag

我正在尝试从网站获取元标记并回显结果,到目前为止它运行良好,但我发现了一个外部问题......

我正在使用此代码:

static private function _parse($HTML) {
    $old_libxml_error = libxml_use_internal_errors(true);

    $doc = new DOMDocument();
    $doc->loadHTML($HTML);

    libxml_use_internal_errors($old_libxml_error);

    $tags = $doc->getElementsByTagName('meta');
    if (!$tags || $tags->length === 0) {
        return false;
    }

    $page = new self();

    foreach ($tags AS $tag) {
        if ($tag->hasAttribute('property') &&
            strpos($tag->getAttribute('property'), 'og:') === 0) {
            $key = strtr(substr($tag->getAttribute('property'), 3), '-', '_');
            $page->_values[$key] = $tag->getAttribute('content');
        }
    }


    if (empty($page->_values)) { return false; }

    return $page;
}

当我尝试提取的网址使用attibute&#39;属性&#39; (例如:<meta property="title">)一切正常,因为代码可以做...但有些网址使用属性&#39; name&#39; (例如:<meta name="title">)代替&#39;属性&#39; ...

所以,我需要找到一个解决方案来提取属性&#39;如果它为空,请返回&#39; name&#39; ...

中的值

我尝试了一些东西,但到目前为止还没有成功。任何人都有想法吗?

1 个答案:

答案 0 :(得分:0)

也许这个

foreach ($tags AS $tag) {
    if ($tag->hasAttribute('property') &&
        strpos($tag->getAttribute('property'), 'og:') === 0) {
        $key = strtr(substr($tag->getAttribute('property'), 3), '-', '_');
        $page->_values[$key] = $tag->getAttribute('content');
    } else if ($tag->hasAttribute('name') &&
        strpos($tag->getAttribute('name'), 'og:') === 0) {
        $key = strtr(substr($tag->getAttribute('name'), 3), '-', '_');
        $page->_values[$key] = $tag->getAttribute('content');
    }
}

正如OZ_注意到的,您可以使用str_ireplace将所有元名重命名为元属性。