Выбор между двумя типами метатегов - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь получить метатеги с веб-сайтов и повторить результат, пока он работает хорошо, но я обнаружил внешнюю проблему ...

Я использую этот код:

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-адрес, который я пытаюсь получить, содержит метатеги с использованием атрибута attibute (например, <meta property="title">), все идет хорошо, как и предполагается в коде ... но некоторые URL-адреса используют атрибут «имя» (например: <meta name="title">) вместо «свойство» ...

Итак, мне нужно найти решение для извлечения значений из 'свойства' и, если оно пустое, вернуть значения из 'имя' ...

Я пробовал кое-что, но пока не получилось .. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 02 апреля 2012

Может быть, это

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 для переименования всего мета-имени в мета-свойство.

...