Como obter o tipo de conteúdo usando html simples dom?
-
19-09-2019 - |
Pergunta
eu tentei find('meta[http-equiv="Content-type"]')
Mas não conseguiu recuperar essas informações.
Solução
Simplehtmldom não usa literais de string citados no seletor. É apenas elem[attr=value]
. E a comparação de valor Parece ser sensível ao minúsculo (pode haver uma maneira de torná-lo insensível ao caso, mas que eu não sei)*
Por exemplo
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";
}
impressões text/html; charset=ISO-8859-1
.
*Editar: Sim, existe uma maneira de realizar uma correspondência insensível ao caso, use *=
ao invés de =
find('meta[http-equiv*=content-type]')
edit2: btw que http-equiv*=content-type
coisa também combinaria <meta http-equiv="haha-no-content-types"...
(Ele apenas testa se a string estiver em algum lugar no valor do atributo). Mas é a única função/operadora insensível ao caso que encontrei. Eu acho que você pode viver com isso neste caso ;-)
Edit 3: ele usa preg_match ('.../i') e o padrão/seletor é passado diretamente para essa função. Portanto, você poderia faça algo como http-equiv*=^content-type$
Para combinar http-equiv="Content-type"
mas não http-equiv="xyzContent-typeabc"
. Mas não sei se esse é um recurso garantido.
Outras dicas
O tipo de conteúdo geralmente faz parte dos cabeçalhos de resposta HTTP-não no corpo. De onde você tirou o documento XML?
eu iria foreach
sobre $this->find('meta');
em caso de escrito de maneira diferente content-type
- Acho que os navegadores não são sensíveis a caso, enquanto o PHP pode ser.