Wie Content-type mit HTML einfach dom zu bekommen?
-
19-09-2019 - |
Frage
Ich habe versucht find('meta[http-equiv="Content-type"]')
aber es versäumt, diese Informationen abzurufen.
Lösung
SimpleHTMLDom verwendet nicht zitiert Stringliterale im Selektor. Es ist nur elem[attr=value]
. Und der Vergleich von Wert scheint Fall empfindlich zu sein (es kann ein Weg sein, um es Groß- und Kleinschreibung zu machen, aber das weiß ich nicht) *
z.
require 'simple_html_dom.php';
$html = file_get_html('http://www.google.com/');
// most likely one one element but foreach doesn't hurt
foreach( $html->find('meta[http-equiv=content-type]') as $ct ) {
echo $ct->content, "\n";
}
druckt text/html; charset=ISO-8859-1
.
* edit: ja, es gibt eine Möglichkeit, ein Groß- und Kleinschreibung Spiel, verwendet *=
statt =
find('meta[http-equiv*=content-type]')
edit2: btw, dass http-equiv*=content-type
Dingen würde auch <meta http-equiv="haha-no-content-types"...
Übereinstimmen (es nur Tests, wenn die Zeichenfolge irgendwo in dem Wert des Attributs ist). Aber es ist der einzige Fall, unempfindliche Funktion / Operator ich finden konnte. Ich denke, man mit ihm in diesem Fall leben kann ;-)
bearbeiten 3: Es verwendet preg_match ( ‚... / i‘) und das Muster / Selektor wird direkt an diese Funktion übergeben. Daher Sie könnte so etwas wie http-equiv*=^content-type$
tun http-equiv="Content-type"
passen, aber nicht http-equiv="xyzContent-typeabc"
. Aber ich weiß nicht, ob dies eine zugesicherten Eigenschaft ist.
Andere Tipps
Der Content-Type ist in der Regel ein Teil der http-Response-Header - nicht im Körper. Wo haben Sie das XML-Dokument aus?
Ich würde foreach
auf $this->find('meta');
bei anders geschrieben content-type
gehen - ich glaube, dass Browser in diesem Fall nicht Groß- und Kleinschreibung ist, während PHP sein könnte