Domdocument загружается

Я хочу разобрать html файл.

$html =htmlentities( file_get_contents('http://forums.heroesofnewerth.com/showthread.php?553261'));
$dom = new DOMDocument();
$dom->loadHTML($html);//line 30

Я получаю эти ошибки

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 113 in D:\Projects\Web projects\done\honscript\index.php on line 30

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 113 in D:\Projects\Web projects\done\honscript\index.php on line 30

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 200 in D:\Projects\Web projects\done\honscript\index.php on line 30

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 200 in D:\Projects\Web projects\done\honscript\index.php on line 30

Изменено на использование htmlenttities и получение

Warning: DOMDocument::loadHTML(): Empty string supplied as input in D:\Projects\Web projects\done\honscript\index.php on line 30

person George Irimiciuc    schedule 13.01.2015    source источник
comment
что находится в строке 30 в index.php?   -  person Fuzzyma    schedule 13.01.2015
comment
$dom-›loadHTML($html); это строка 30   -  person George Irimiciuc    schedule 13.01.2015
comment
@sjagr Я изменил это, теперь я получаю предупреждение: DOMDocument::loadHTML(): пустая строка, указанная в качестве ввода в D:\Projects\Web Projects\done\honscript\index.php в строке 30   -  person George Irimiciuc    schedule 13.01.2015


Ответы (1)


Документ, который вы пытаетесь загрузить, не является допустимым HTML и, следовательно, недействительным DOM (см. http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fforums.heroesofnewerth.com%2Fshowthread.php%3F553261 для обширного списка ошибок HTML на этой странице).

Таким образом, PHP в основном должен угадать, что подразумевается под HTML, с которым он поставляется, и предупреждает об этом (он может ошибиться).

& — это специальный символ в HTML, который используется для экранирования специальных символов (например, для печати ‹ на HTML-странице, которую вам нужно написать . Он также имеет особое значение в URL-адресах в качестве разделителя для переменных запроса (например, http://example.com?foo=bar&braz=omfg) и поэтому часто появляется на веб-сайтах. правильный способ написать & в HTML.

Вероятно, догадки верны, и DOMDocument будет работать нормально. Таким образом, вы можете просто подавить это предупреждение следующим образом:

@$dom->loadHTML($html);

В противном случае вам придется как-то исправить HTML. Просто запустить его через htmlentities, как указано выше, не получится, так как он также будет экранировать все маркеры тегов и т. д.

Что, вероятно, может сработать, так это заменить все & на, хотя это может привести к другим последствиям, таким как amp; поэтому вам нужно будет заменить только те &, за которыми не следует amp;.

person David Triebe    schedule 13.01.2015
comment
Но почему это недействительный HTML, если это веб-сайт? И только & создает проблемы? - person George Irimiciuc; 13.01.2015
comment
HTML — это стандарт с определенными правилами, и этот веб-сайт не следует этим правилам (см. validator.w3.org/, что не так). Парсеры HTML в основном созданы для обхода неправильного HTML путем угадывания. Поэтому сайт до сих пор работает. - person David Triebe; 13.01.2015
comment
Добавлена ​​​​небольшая информация о том, почему & является особенным в ответ. - person David Triebe; 13.01.2015