Я получаю строку html с использованием curl:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html_string = curl_exec($ch);
Когда я echo
это, я вижу совершенно хороший html, как мне нужно для моих синтаксических запросов. Но, пытаясь отправить эту строку в метод HTML DOM PARSER
str_get_html($html_string)
, он не будет загружать его (возвращает false из вызова метода).
Я попытался сохранить его в файл и открыть файл file_get_html
в файле, но то же самое происходит.
Что может быть причиной этого? Как я уже сказал, html отлично выглядит, когда я повторяю его.
Большое спасибо.
Сам код:
$html = file_get_html("http://www.bgu.co.il/tremp.aspx"); $v = $html->find('input[id=__VIEWSTATE]'); $viewState = $v[0]->attr['value']; $e = $html->find('input=[id=__EVENTVALIDATION]'); $event = $e[0]->attr['value']; $html->clear(); unset($html); $body = " A_STRING_THAT_CONTAINS_SOME_DATA " $ch = curl_init("http://www.bgu.co.il/tremp.aspx"); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html_string = curl_exec($ch); $file_handle = fopen("file.txt", "w"); fwrite($file_handle, $html_string); fclose($file_handle); curl_close($ch); $html = str_get_html($html_string);
с$html = file_get_html("http://www.bgu.co.il/tremp.aspx"); $v = $html->find('input[id=__VIEWSTATE]'); $viewState = $v[0]->attr['value']; $e = $html->find('input=[id=__EVENTVALIDATION]'); $event = $e[0]->attr['value']; $html->clear(); unset($html); $body = " A_STRING_THAT_CONTAINS_SOME_DATA " $ch = curl_init("http://www.bgu.co.il/tremp.aspx"); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html_string = curl_exec($ch); $file_handle = fopen("file.txt", "w"); fwrite($file_handle, $html_string); fclose($file_handle); curl_close($ch); $html = str_get_html($html_string);
У вас скручивается ссылка, похоже, есть много элементов (большой файл).
И я разбираю строку (файл) размером с вашу ссылку и сталкиваюсь с этой проблемой.
После того, как я увидел исходный код, я нашел проблему. Меня устраивает !
Я обнаружил, что simple_html_dom.php имеют ограничение на размер, который вы читаете.
// получить html dom из строки function str_get_html ($ str, $ lowercase = true, $ forceTagsClosed = true, $ target_charset = DEFAULT_TARGET_CHARSET, $ stripRN = true, $ defaultBRText = DEFAULT_B R_TEXT, $ defaultSpanText = DEFAULT_SPAN_TEXT) { $ dom = new simple_html_dom (null, $ lowercase, $ forceTagsClosed, $ target_charset, $ stripRN, $ defaultBRText, $ defaultSpanText); if (empty ($ str) || strlen ($ str)> MAX_FILE_SIZE) { $ Dom-> ясно (); return false; } $ dom-> load ($ str, $ lowercase, $ stripRN); return $ dom; }
вы должны изменить размер по умолчанию ниже (он находится на вершине simple_html_dom.php)
может измениться до 100000000? тебе решать.
define ('MAX_FILE_SIZE', 6000000);
Вы проверяли, каким образом HTML каким-то образом закодирован таким образом, что HTML DOM PARSER не ожидает? Например, с объектами HTML, такими как <html>
вместо <html>
– это все равно будет отображаться как правильный HTML в вашем браузере, но не будет анализировать.
Я предполагаю, что вы используете curl + str_get_html вместо простого использования file_get_html с URL-адресом из-за параметров POST, которые вам нужно отправить.
Вы можете использовать этот валидатор W3C ( http://validator.w3.org/#validate_by_input+with_options ) для проверки возвращаемого HTML, а затем, как только вы уверены, что результат является 100% -ным допустимым кодом HTML, вы можете сообщить об ошибке здесь: http://sourceforge.net/p/simplehtmldom/bugs/ .