我正在尝试从网络服务中收集一些信息,但我遇到了网页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部分有什么好办法?问候。
答案 0 :(得分:0)
尝试在加载cardView
之前添加PCLZIP
,如下所示:
IOFactory
答案 1 :(得分:0)
解决方案是-将&
符号替换为&
或者,如果您必须具有该&,那么可以将其包含在:<![CDATA[ - ]]>