PHP DOM Document LoadHTMLFile прерван скобками

Я работаю над синтаксическим анализатором PHP, который анализирует страницу HTML-групп моей школы. Это страницы с уникальным URL-адресом, основанным на названии курса и нескольких других переменных. Страница состоит из набора HTML <table>.

Загрузка HTML из URL-адреса работает нормально, пока не встретит ) в содержимом файла. Затем он просто перестает загружаться и сохраняет только то, что уже получил. Очевидно, что загруженный HTML-код был создан не мной, и я никак не могу предотвратить появление таких символов в HTML-коде.

Однако он отлично работает, когда я запускаю его локально с помощью MAMP. Я пытался найти ответы, но не нашел ничего, что решило бы мою проблему.

Как я могу избежать этих символов перед загрузкой?

Мой текущий PHP:

$dom = new DOMDocument; 
libxml_use_internal_errors(true); // the HTML i parse contains a lot of unclosed tags, this to prevent the errors from displaying on the page
$dom->loadHTMLFile('http://isarog.hhs.nl/Web_Site/HHS/ICTM/Public/Iris_Roster/Timetables/11_2/11_2-CMD-4vt-p2.html');   

echo $dom->getElementsByTagName('html')->item(0)->nodeValue;

person Joey    schedule 21.11.2011    source источник
comment
Скобки AFAIK не имеют значения в html, вы уверены, что нет чего-то еще? если вы создадите идентичную страницу, но без круглых скобок, и вместо этого загрузите ее, это сработает?   -  person Damien Pirsy    schedule 22.11.2011
comment
Я не пробовал этого, но когда я повторяю тег <html> nodeValue, он показывает все до тех пор, пока эта скобка не вступит в игру.   -  person Joey    schedule 22.11.2011
comment
Ну... попробуй... Что там за скобками?   -  person Damien Pirsy    schedule 22.11.2011
comment
URL-адрес HTML: isarog.hhs.nl/Web_Site/HHS/ICTM/Public/Iris_Roster/Timetables/ Фрагмент места возникновения проблемы: .. <TD>Senad Mato):evic</TD> ... При распечатке отображается: .. <TD>Senad Mato Сейчас попробую ту же страницу.   -  person Joey    schedule 22.11.2011
comment
Разве ты не видишь, что между Мато и скобками стоит символ? используйте правильную кодировку при загрузке файла, может быть, это дает проблемы   -  person Damien Pirsy    schedule 22.11.2011
comment
Я попробовал тот же файл, и паратезис определенно является причиной того, что он не загружается должным образом. При удалении работает нормально. Я не вижу символа между Мато и скобками.   -  person Joey    schedule 22.11.2011
comment
Да, хотя я не вижу, что такое характер; и не только там. Попробуйте снова не удалять круглые скобки, а удалить Mato) и переписать его: тогда круглые скобки должны работать нормально. Либо скобка не обычная, либо о, либо другой символ между ними.   -  person Damien Pirsy    schedule 22.11.2011
comment
Я переписал его, и теперь он работает нормально. В любом случае, я могу решить эту проблему с помощью PHP, не переписывая HTML вручную?   -  person Joey    schedule 22.11.2011


Ответы (1)


Этот вопрос решил мою проблему: Удалить управляющие символы из строки php

По-видимому, в моем вводе HTML был невидимый символ, из-за которого функция загрузки прекращала чтение. Все прояснилось следующим:

$str = file_get_contents('http://isarog.hhs.nl/Web_Site/HHS/ICTM/Public/Iris_Roster/Timetables/11_2/11_2-CMD-4vt-p2.html');
$str = mb_convert_encoding($str, 'utf-8', mb_detect_encoding($str));

$str = preg_replace('/[\x00-\x1F\x7F]/', '', $str);
$str = ereg_replace("[[:cntrl:]]", "", $str);

$dom = new DOMDocument;
libxml_use_internal_errors(true); // Screw al die markup syntax errors dan ook
$dom->loadHTML($str);
person Joey    schedule 22.11.2011