Я попробовал find('meta[http-equiv="Content-type"]')
, но мне не удалось получить эту информацию.
Как получить Content-type с помощью простого html dom?
Ответы (3)
SimpleHTMLDom не использует строковые литералы в кавычках в селекторе. Это просто elem[attr=value]
. И сравнение value кажется чувствительным к регистру (может быть способ сделать его нечувствительным к регистру, но я не знаю)*
E.g.
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]')
edit2: кстати, эта штука http-equiv*=content-type
также будет соответствовать <meta http-equiv="haha-no-content-types"...
(она только проверяет, находится ли строка где-то в значении атрибута). Но это единственная нечувствительная к регистру функция/оператор, которую я смог найти. Думаю, в этом случае с этим можно жить ;-)
edit 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 может быть.