str_get_html не загружает действительную строку html

Я получаю строку 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, такими как &lt;html&gt; вместо <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/ .