使用PHP Simple HTML DOM Parser触发致命错误,寻求技术帮助
解决HtmlDomParser传入bool类型的错误
针对你遇到的Fatal error: Uncaught TypeError: Argument 1 passed to voku\helper\HtmlDomParser::loadHtml() must be of the type string, bool given错误,即使你确认$html是string类型,也可以从以下几个方向排查:
排查curl请求的潜在错误
虽然你设置了CURLOPT_RETURNTRANSFER,但curl请求失败时curl_exec仍会返回false,你当前的代码未做错误检查,可能测试时请求成功,但实际运行时出现了请求失败的情况。修改代码,在curl_exec后、curl_close前添加错误检查:$html = curl_exec($curl); // 新增curl错误检查 if ($html === false) { echo 'Curl请求错误: ' . curl_error($curl); curl_close($curl); exit; } curl_close($curl);检查$html是否为空字符串
有些情况下curl请求成功(返回string),但目标网站返回空内容,空字符串传入HtmlDomParser::str_get_html()后,内部处理可能触发类型错误。可以在初始化解析器前添加判断:if (empty(trim($html))) { echo '获取到的HTML内容为空'; exit; } $htmlDomParser = HtmlDomParser::str_get_html($html);验证USER_AGENT常量是否正确定义
若constants.php中未正确定义USER_AGENT常量,curl会使用默认UA,部分网站会拦截此类请求,导致返回空或错误内容。可以直接替换为一个合法的UA字符串测试:curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');处理HTML编码问题
目标网站的HTML编码可能与解析器预期不符,导致解析器内部处理失败。可以尝试统一编码后再传入解析器:$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); $htmlDomParser = HtmlDomParser::str_get_html($html);
内容的提问来源于stack exchange,提问作者Martyn Oliver
相关产品推荐
相关产品推荐

