Как получить тип контента, используя простой html dom?

StackOverflow https://stackoverflow.com/questions/2213675

Вопрос

Я пытался 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 может быть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top