Der perfekte Ausdruck um Meta-Tags in PHP mit preg_match_all() auszulesen

Gerade erst beschäftigte ich mich damit, die Meta-Tags einer Webseite auszulesen.
Klar, lässt sich das komfortable mit der Funktion get_meta_tags() lösen, aber das ist nur dann sinnvoll wenn man sich nur für die Meta-Tags interessiert.
Da ich aber auch mit dem Webseiteninhalt weiter arbeiten muss, lese ich doch nicht die Webseite zweimal ein.
Also gibt es für die Ermittlung der Meta-Tags nur die Funktion preg_match_all().
Im Netz gibt dazu einige Lösungen, allerdings sind die nicht gerade sehr tolerant, was die Schreibweise und Anordnung betrifft. Möglich wären diese Schreibweisen:

<meta name="description" content="dictPage.com ist ein Online/Web Translator" />
<meta content="dictPage.com ist ein Online/Web Translator" name="description">
<meta name='description' content='dictPage.com ist ein Online/Web Translator' />
<meta name="description" content="dictPage.com ist ein Online/Web Translator"/>
<meta name="description" content="dictPage.com ist ein Online/Web Translator">
<meta name="description" content='dictPage.com ist ein Online/Web Translator'>

…um nur einige Möglichkeiten zu nennen.

Mit diesem Pattern lässt sich via preg_match_all() alle möglichen Schreibweisen abdecken:

// $strSiteHTMLCode enthält den HTML-Code der Webseite (z.B. eingelesen via CURL oder file_get_contents())
if (preg_match_all("/<meta[^>]+[content|name]=[\"|']([^\"]*)[\"|'][^>]+[content|name]=[\"|\']([^\"]*)[\"|']?[\s]*[\/]?[\s]*>/siU", $strSiteHTMLCode, $arrMetaMatch, PREG_SET_ORDER)) {
    print_r($arrMetaMatch);
}

Viel Erfolg damit.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *