0

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

我正在使用这段代码:

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;
}

当我尝试获取的 URL 具有使用属性“属性”(例如:)的元标记<meta property="title">时,一切都很好,因为代码应该这样做......但是某些 URL 使用属性“名称”(例如:<meta name="title">) 而不是“财产”...

所以,我需要找到一个解决方案来从'property'中提取值,如果它是空的,则从'name'中返回值......

我尝试了一些事情,但到目前为止还没有成功..有人有想法吗?

4

1 回答 1

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 将所有元名称重命名为元属性。

于 2012-04-01T22:31:03.680 回答