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 链接似乎有很多元素(大文件)。

我正在解析一个与您的链接一样大的字符串(文件)并遇到此问题。

看到源代码后,我发现了问题所在。这个对我有用 !


我发现 simple_html_dom.php 限制了您阅读的大小。

// 从字符串中获取 html dom
  函数 str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
  {
           $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
           如果 (空($str) || strlen($str) > MAX_FILE_SIZE)
           {
                   $dom->clear();
                   返回假;
           }
           $dom->load($str, $lowercase, $stripRN);
           返回 $dom;
  }

您必须更改下面的默认大小(它在 simple_html_dom.php 的顶部)
也许更改为 100000000 ?由你决定。

定义('MAX_FILE_SIZE',6000000);
于 2014-02-09T12:02:35.923 回答
1

您是否检查了 HTML 是否以某种方式编码 HTML DOM PARSER 不期望?例如,使用 HTML 实体&lt;html&gt;代替<html>- 仍然会在您的浏览器中显示为正确的 HTML,但不会解析。

于 2013-01-05T14:26:28.147 回答
0

我假设您使用 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/

于 2013-01-05T15:05:55.983 回答