PHP DOM документ 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
Не съм пробвал това, но когато повторя nodeValue на етикета <html>, той показва всичко до момента, в който тази скоба влезе в действие.   -  person Joey    schedule 22.11.2011
comment
Е...опитайте това...Какво има отвъд скобите?   -  person Damien Pirsy    schedule 22.11.2011
comment
HTML url: 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) и да го пренапишете: тогава скобите трябва да работят добре. Или скобата не е нормалната, или o, или друг знак между тях.   -  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