12

curlを使用してhtml文字列を受け取ります。

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);
4

3 に答える 3

41

curl link には多くの要素(大きなファイル)が含まれているようです。

そして、リンクと同じ大きさの文字列(ファイル)を解析していて、この問題が発生しました。

ソースコードを見た後、問題を発見しました。わたしにはできる !


simple_html_dom.php には、読み取るサイズが制限されていることがわかりました。

// 文字列から html dom を取得
  関数 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();
                   false を返します。
           }
           $dom->load($str, $lowercase, $stripRN);
           $dom を返します。
  }

以下のデフォルトサイズを変更する必要があります(simple_html_dom.phpの上部にあります)
多分100000000に変更しますか?それはあなた次第です。

define('MAX_FILE_SIZE', 6000000);
于 2014-02-09T12:02:35.923 に答える
1

HTML DOM PARSER が予期しない方法で HTML がエンコードされているかどうかを確認しましたか? &lt;html&gt;たとえば、代わりに– のような HTML エンティティを使用<html>すると、ブラウザでは正しい HTML として表示されますが、解析されません。

于 2013-01-05T14:26:28.147 に答える
0

POST パラメーターを送信する必要があるため、URL で単に file_get_html を使用する代わりに、curl + str_get_html を使用していると思います。

この W3C バリデーター ( http://validator.w3.org/#validate_by_input+with_options ) を使用して、返された HTML を検証し、結果が 100% 有効な HTML コードであることを確認したら、ここでバグを報告できます。http://sourceforge.net/p/simplehtmldom/bugs/ .

于 2013-01-05T15:05:55.983 に答える