Зареждане на 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

Променено на използване на htmlentities и получаване

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; така че ще трябва да замените само тези &s, които не са последвани от 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