PHP如何避免此警告:DOMDocument :: loadHTML():CDATA中的char无效

时间:2017-04-27 02:40:19

标签: php cdata

我正在尝试从网络服务中收集一些信息,但我遇到了网页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部分有什么好办法?问候。

2 个答案:

答案 0 :(得分:0)

尝试在加载cardView之前添加PCLZIP,如下所示:

IOFactory

答案 1 :(得分:0)

解决方案是-将&符号替换为&amp; 或者,如果您必须具有该&,那么可以将其包含在:<![CDATA[ - ]]>