【问题标题】:PHP How to avoid this warning: DOMDocument::loadHTML(): Invalid char in CDATAPHP 如何避免此警告:DOMDocument::loadHTML(): Invalid char in CDATA
【发布时间】: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 部分的好方法?问候。

【问题讨论】:

标签: php cdata


【解决方案1】:

解决方案是 - 将 & 符号替换为 & 或者如果你必须拥有它,那么你可以将它附在:<![CDATA[ - ]]>

【讨论】:

    【解决方案2】:

    尝试在加载IOFactory之前添加PCLZIP,如图所示:

    require_once '/Classes/PHPExcel.php';
     \PHPExcel_Settings::setZipClass(\PHPExcel_Settings::PCLZIP);   
    

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2017-01-02
      • 2016-12-25
      • 2021-02-04
      相关资源
      最近更新 更多