Как получить тип контента, используя простой html dom?
-
19-09-2019 - |
Вопрос
Я пытался find('meta[http-equiv="Content-type"]')
но получить эту информацию не удалось.
Решение
SimpleHTMLDom не использует строковые литералы в кавычках в селекторе.Это просто elem[attr=value]
.И сравнение ценить кажется, чувствителен к регистру (возможно, есть способ сделать его нечувствительным к регистру, но я не знаю)*
Например.
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";
}
принты text/html; charset=ISO-8859-1
.
*редактировать:да, есть способ выполнить сопоставление без учета регистра, используйте *=
вместо =
find('meta[http-equiv*=content-type]')
редактировать2:кстати это http-equiv*=content-type
штука тоже подойдет <meta http-equiv="haha-no-content-types"...
(он только проверяет, находится ли строка где-то в значении атрибута).Но это единственная функция/оператор, нечувствительная к регистру, которую я смог найти.Думаю, в этом случае с этим можно жить ;-)
редактировать 3:Он использует preg_match('.../i'), и шаблон/селектор напрямую передается этой функции.Поэтому вы мог сделать что-то вроде http-equiv*=^content-type$
соответствовать http-equiv="Content-type"
но нет http-equiv="xyzContent-typeabc"
.Но я не знаю, является ли это гарантированной функцией.
Другие советы
Content-Type обычно является частью заголовков http-ответов, а не тела.Откуда вы взяли XML-документ?
я бы пошел foreach
на $this->find('meta');
если написано по-другому content-type
- Я думаю, что браузеры в этом случае не чувствительны к регистру, в то время как PHP может быть.