2013-01-05 9 views
5

Otrzymuję ciąg HTML przy użyciu Zwijanie:str_get_html nie ładuje prawidłowy ciąg HTML

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$html_string = curl_exec($ch); 

Kiedy echo go widzę doskonale dobrą html jak wymagają dla moich potrzeb analizowania. Ale, próbując wysłać ten ciąg do HTML DOM PARSER metoda str_get_html($html_string), to nie przesłać go (zwraca wartość false z wywołania metody).

Próbowałem zapisać plik do pliku i otworzyć z file_get_html w pliku, ale to samo dzieje się.

Co może być tego przyczyną? Jak już powiedziałem, html wygląda doskonale, gdy go echo.

Wielkie dzięki.

Kod sama:

$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); 
+0

Jeśli napiszesz swój kod, prawdopodobnie pomożemy. –

+0

To działa dobrze dla mnie. – pguardiario

Odpowiedz

1

Czy sprawdzić czy HTML jest jakoś zakodowane w sposób HTML DOM parser nie spodziewać? Na przykład. z obiektami HTML takimi jak &lt;html&gt; zamiast <html> - które nadal będą wyświetlane jako poprawne HTML w przeglądarce, ale nie będą analizowane.

+0

Zapisałem ciąg do pliku i spojrzałem na niego za pomocą notatnika. Znaczniki (i cały html) wygląda doskonale. – Dani

0

Przyjmuję, że używasz curl + str_get_html zamiast po prostu używać file_get_html z adresem URL ze względu na parametry POST, które musisz wysłać.

Możesz użyć tego weryfikatora W3C (http://validator.w3.org/#validate_by_input+with_options), aby sprawdzić poprawność zwracanego HTML, a następnie, gdy jesteś pewien, że wynik jest w 100% prawidłowym kodem HTML, możesz zgłosić błąd tutaj: http://sourceforge.net/p/simplehtmldom/bugs/.

+0

Cóż, użyłem walidatora i otrzymałem błędy dla zwróconego kodu HTML. Zabawne jest to, że kiedy przyjmuję stronę źródłową HTML, której celem jest praca z przeglądarką internetową i próbuję ją zweryfikować, również otrzymuję błędy. To niestety nie pomaga. Jeśli zwrócona strona HTML ładuje się prawidłowo podczas jej odtwarzania, czy to nie powinno wystarczyć? – Dani

+0

To znaczy, że strona, którą próbujesz przeanalizować, jest nieprawidłowy HTML, jakie są błędy BTW? W każdym razie możesz spróbować zgłosić błąd do projektu PHP parsera DOM DOM, ale jeśli kod HTML, który próbujesz analizować, nie jest prawidłowym kodem HTML, nie jestem pewien, czy to naprawisz. – FerCa

21

You curl link wydaje się mieć wiele elementów (duży plik).

I parsuję ciąg (plik) tak duży jak twój link i napotykam ten problem.

Po tym, jak zobaczyłem kod źródłowy, znalazłem problem. Mi to pasuje !


stwierdziliśmy, że simple_html_dom.php mają ograniczyć rozmiar czytasz.

// get html dom from string 
    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->clear(); 
        return false; 
      } 
      $dom->load($str, $lowercase, $stripRN); 
      return $dom; 
    } 

musisz zmienić domyślny rozmiar poniżej (jest na górze simple_html_dom.php)
może przejść na 100000000? to zależy od Ciebie.

define('MAX_FILE_SIZE', 6000000);
+0

Dzięki za najlepszą odpowiedź tutaj. Powodowało to niepowodzenie mojego dokumentu. –

+0

Żałuję, że nie widziałem tego około 4 godzin debugowania temu! Dzięki. – user2029890

+2

You Rock kumpel! Dzięki. – Ankit