Comment obtenir du contenu de type en utilisant dom html simple?
-
19-09-2019 - |
Question
J'ai essayé find('meta[http-equiv="Content-type"]')
mais il n'a pas pu récupérer ces informations.
La solution
SimpleHTMLDom n'utilise pas littéraux chaîne entre guillemets dans le sélecteur. Il est juste elem[attr=value]
. Et la comparaison des valeur semble être sensible à la casse (il peut y avoir un moyen de le rendre insensible à la casse cas, mais je ne sais pas) *
par exemple.
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";
}
imprime text/html; charset=ISO-8859-1
.
* edit: oui, il y a un moyen d'effectuer une correspondance insensible à la casse, utilisez *=
au lieu de =
find('meta[http-equiv*=content-type]')
Edit2: BTW que thingy http-equiv*=content-type
retrouverait aussi <meta http-equiv="haha-no-content-types"...
(il vérifie uniquement si la chaîne est quelque part dans la valeur de l'attribut). Mais il est la seule fonction insensible à la casse / opérateur que je pouvais trouver. Je suppose que vous pouvez vivre avec elle dans ce cas ;-)
modifier 3: Il utilise preg_match ( « ... / i ») et le motif / sélecteur est directement transmis à cette fonction. Par conséquent, vous peut faire quelque chose comme http-equiv*=^content-type$
pour correspondre http-equiv="Content-type"
mais pas http-equiv="xyzContent-typeabc"
. Mais je ne sais pas si cela est une caractéristique couverte par la garantie.
Autres conseils
Le type de contenu est généralement partie des en-têtes de réponse HTTP - pas dans le corps. Où avez-vous obtenu le document XML à partir?
J'irais foreach
sur $this->find('meta');
en cas de content-type
écrit différemment - Je pense que les navigateurs ne sont pas dans ce cas sensible à la casse, alors que php pourrait être