Я пытаюсь вытащить метатеги из html-страницы, чтобы сравнить две страницы (live и dev), чтобы увидеть, являются ли они SEO одинаковыми после редизайна / рефакторинга сайта. Мне нужно сравнить названия, метатеги (описание, opengraph и т. Д.), H1's, нашу аналитику (Omniture) и наши теги объявлений (doubleclick) – все те же.
Моя проблема заключается в получении метатег. Http://php.net/manual/en/function.get-meta-tags.php работает только в том случае, если у них есть атрибут name =, то же самое с решением «mariano at cricava dot com».
Я не хочу ограничивать его наличием определенных атрибутов, я мог бы предположить, что все наши метатеги имеют либо имя =, либо свойство = или http-equiv =, и соответствующим образом изменяют регулярное выражение, но не могут быть полностью уверены, поскольку это массивный веб-сайт и любое случайное дерьмо могут быть в тегах (отсюда этот инструмент должен проверить этот материал!) и хотел бы оставить его как можно более динамичным.
у меня есть
$page = @file_get_contents('http://.../'); preg_match_all('#<meta(?:\s+?([^\=]+)\=\"(.+?)\")+?\s*?/?>#sui', $page, $matches, PREG_SET_ORDER)
но подшаблоны переопределяют друг друга, поэтому это только вытаскивает последнюю пару атрибут-имя = атрибут-значение
Array ( [0] => Array ( [0] => <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> [1] => content [2] => text/html; charset=UTF-8 ) [1] => Array ( [0] => <meta name="description" content="some description" /> [1] => content [2] => some description ) [2] => Array ( [0] => <meta property="og:type" content="website" /> [1] => content [2] => website ) ...
Мне нужны все атрибуты для всех метатег. Я мог бы сделать это в два этапа, потянув содержимое <meta ([^>]*)>
затем выполнив второе регулярное выражение для результатов, но это кажется лишним с силе regex?