【发布时间】:2017-04-27 02:40:19
【问题描述】:
我正在尝试从 Web 服务收集一些信息,但我遇到了页面的 CDATA 部分的问题,因为当我使用以下内容时一切正常:
$url = 'http://www.example.com';
$content = file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($content);
foreach($doc->getElementsByTagName('h3') as $subtitle) {
echo $subtitle->textContent; //The output is the Subtitle/s.
}
但是当页面包含 CDATA 部分时,$doc->loadHTML($content) 行上的此错误会出现问题。
Warning: DOMDocument::loadHTML(): Invalid char in CDATA
我在这里看到了一个我尝试实施但没有成功的解决方案。
function sanitize_html($content) {
if (!$content) return '';
$invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/';
return preg_replace($invalid_characters,'', $content);
}
$url = 'http://www.example.com';
$content = file_get_contents($url);
$cleanContent = sanitize_html($content);
$doc = new DOMDocument();
$doc->loadHTML($cleanContent); //Warning: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity
但我得到了另一个错误:
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity
什么是处理页面的 CDATA 部分的好方法?问候。
【问题讨论】:
-
也许使用 Tidy stackoverflow.com/a/10513231/4471134 ?或者干脆忽略它
libxml_use_internal_errors(true);