2013-01-05 8 views
5

Ich erhalte eine HTML-String curl mit:str_get_html wird geladen keine gültige HTML-String

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

Als ich es echo ich eine ganz gute html sehen, wie ich für meine Parsing Bedürfnisse erfordern. Wenn Sie jedoch versuchen, diese Zeichenfolge an HTML DOM PARSER Methode str_get_html($html_string) zu senden, würde sie es nicht hochladen (false aus dem Methodenaufruf).

Ich habe versucht, es in Datei speichern und öffnen mit file_get_html auf der Datei, aber das gleiche passiert.

Was kann die Ursache dafür sein? Wie gesagt, das HTML sieht absolut gut aus, wenn ich es hake.

Vielen Dank.

Der Code selbst:

$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

Wenn Sie Ihren Code veröffentlichen, können wir Ihnen wahrscheinlich helfen. –

+0

Es funktioniert gut für mich. – pguardiario

Antwort

1

Haben Sie überprüfen, ob die HTML irgendwie in einer Weise, HTML DOM-Parser erwartet nicht codiert ist? Z.B. mit HTML-Entities wie &lt;html&gt; anstelle von <html> - das würde immer noch als korrektes HTML in Ihrem Browser angezeigt werden, würde aber nicht parsen.

+0

Ich speicherte die Zeichenfolge in Datei und sah es mit Notizblock an. Die Tags (und der gesamte HTML-Code) sieht einwandfrei aus. – Dani

0

Ich nehme an, dass Sie curl + str_get_html verwenden, anstatt einfach file_get_html mit der URL zu verwenden, da die POST-Parameter gesendet werden müssen.

Sie können diesen W3C-Validator (http://validator.w3.org/#validate_by_input+with_options) verwenden, um den zurückgegebenen HTML-Code zu validieren. Sobald Sie sicher sind, dass das Ergebnis ein 100% gültiger HTML-Code ist, können Sie hier einen Fehler melden: http://sourceforge.net/p/simplehtmldom/bugs/.

+0

Nun, ich habe den Validator verwendet und Fehler für den zurückgegebenen HTML erhalten. Lustig ist, wenn ich die Quellseite des HTML nehme, die ich mit einem Webbrowser bearbeiten will und versuche, sie zu validieren, erhalte ich auch Fehler. Also leider hilft mir das nicht weiter. Wenn die zurückgegebene HTML-Seite korrekt hochgeladen wird, wenn Sie sie zurückgeben, soll das nicht ausreichen? – Dani

+0

Nun, das bedeutet, dass die Seite, die Sie analysieren wollen, kein gültiges HTML ist, was sind die Fehler BTW? Wie auch immer, Sie können versuchen, einen Fehler im PHP HTML-DOM-Parser-Projekt zu melden, aber wenn der HTML-Code, den Sie analysieren wollen, kein wirklich gültiger HTML-Code ist, bin ich mir nicht sicher, ob Sie das beheben können. – FerCa

21

Sie Curl Link scheint viele Elemente (große Datei).

Und ich Parsing eine Zeichenfolge (Datei) so groß wie Ihre Verbindung und dieses Problem auftritt.

Nachdem ich den Quellcode sah, fand ich das Problem. Für mich geht das !


fand ich, dass simple_html_dom.php die Größe, die Sie lesen begrenzen haben.

// 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; 
    } 

Sie muss unterhalb der Standardgröße zu ändern (es ist auf der Oberseite des simple_html_dom.php)
vielleicht zu 100.000.000 ändern? Es liegt an dir.

define('MAX_FILE_SIZE', 6000000);
+0

Danke dafür, beste Antwort hier. Dies führte dazu, dass mein Dokument fehlschlug. –

+0

Ich wünschte, ich hätte das vor 4 Stunden Debugging gesehen! Vielen Dank. – user2029890

+2

Sie Rock Kumpel! Vielen Dank. – Ankit

Verwandte Themen