¿Cómo conseguir el tipo de contenido utilizando dom simple html?
-
19-09-2019 - |
Pregunta
He intentado find('meta[http-equiv="Content-type"]')
pero no pudo recuperar esa información.
Solución
SimpleHTMLDom no utiliza cadenas literales indicados en el selector. Es sólo elem[attr=value]
. Y la comparación de valor parece ser entre mayúsculas y minúsculas (puede haber una manera para que sea sensible a las mayúsculas, pero eso no lo sé) *
por ejemplo.
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";
}
impresiones text/html; charset=ISO-8859-1
.
* Editar: sí, hay una forma de realizar un partido entre mayúsculas y minúsculas, utilice *=
en lugar de =
find('meta[http-equiv*=content-type]')
Edit2: por cierto que cosita http-equiv*=content-type
también coincidiría <meta http-equiv="haha-no-content-types"...
(que sólo las pruebas si la cadena está en algún lugar en el valor del atributo). Pero es la única función de mayúsculas y minúsculas / operador que pude encontrar. Creo que se puede vivir con ella en este caso ;-)
Datos 3: Utiliza preg_match ( '... / i') y el patrón / selector se pasa directamente a esa función. Por lo tanto, podría hacer algo como http-equiv*=^content-type$
para que coincida con http-equiv="Content-type"
pero no http-equiv="xyzContent-typeabc"
. Pero no sé si esto es una característica garantizada.
Otros consejos
El Content-Type es típicamente parte de las cabeceras HTTP de respuesta - no en el cuerpo. ¿Dónde obtuvo el documento XML a partir de?
Me gustaría ir foreach
en $this->find('meta');
en caso de content-type
diferente por escrito - Creo que los navegadores no están en este caso entre mayúsculas y minúsculas, mientras que PHP puede ser