str_get_html不能加载有效的HTML字符串。

12
我接收到了一个使用curl获取的HTML字符串:

I receive an html string using 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 打开该文件,但仍然出现相同的问题。
可能的原因是什么?正如我所说,当我使用 echo 输出它时,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);

如果您发布您的代码,我们可能可以提供帮助。 - cryptic ツ
3个回答

43

您的curl链接似乎有许多元素(大文件)。

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

看了源代码后,我找到了问题。它对我起作用!


我发现simple_html_dom.php限制了你读取的大小。

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

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

define('MAX_FILE_SIZE', 6000000); 

谢谢您,这是最好的答案。这个问题导致我的文档失败。 - Fredrick Brennan
真希望在我调试了4个小时之前就看到这个!谢谢。 - user2029890
2
你太棒了伙计!谢谢。 - Ankit
太棒了!我已经搜索了几个小时,以为没有其他选择了! - FoxInFlame
你真是个救命恩人! - Mohammad Mahroz

1
你有检查过HTML是否以某种HTML DOM解析器不期望的方式进行编码吗?例如,使用HTML实体,如&lt;html&gt;而不是<html> - 这仍将在浏览器中显示为正确的HTML,但无法解析。

我将字符串保存到文件中,并使用记事本查看。标签(以及整个HTML)看起来完全有效。 - Dani

0

我使用了验证器并收到了返回的HTML错误。有趣的是,当我使用Web浏览器获取要处理的HTML源页面并尝试进行验证时,我也会收到错误。所以不幸的是这对我没有帮助。如果返回的HTML页面在回显时成功上传,那不应该就足够了吗? - Dani
这意味着您尝试解析的页面不是有效的HTML,那么有哪些错误呢?无论如何,您可以尝试向PHP HTML DOM解析器项目报告错误,但如果您尝试解析的HTML代码不是真正有效的HTML,则不确定是否能够修复此问题。 - FerCa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接