这是第10行:
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
这是我后端的完整代码段:
class ParseImageLinks{
public function __construct(){
}
public function Run(\DataLayer\Gallery\Requests\ParseImageLinks $request){
$doc = new \DOMDocument('1.0');
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
$images = $doc->getElementsByTagName ( "img");
foreach ($images as $key => $value){
$src = $value->getAttribute("src");
$local = false;
if ($src[0] == 'h') {
$src = explode("http://", $src)[1];
}else{
if ($src[0] == '/') {
$src = substr($src,1);
$local = true;
}
}
$parse = explode('/', $src);
if (count($parse) > 2 && ($local || $parse[0] == $_SERVER['SERVER_NAME'] || $parse[0] == 'localhost:8080')) {
$image = $parse[count($parse)-1];
$size = $parse[count($parse)-2];
$value->setAttribute("src", '/?image='.$image."&size=".$size);
}
}
return $doc->saveHTML();
}
}
我花了几个小时在网上搜索。到目前为止,这是我尝试过的:
@$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
libxml_use_internal_errors(true);
$doc->loadHTML('<?xml encoding="utf-8" ?>'.$request->getData());
我以此创建了一个test.php文件
<?php
$doc = new \DOMDocument('1.0');
$doc->loadHTML('<ul><li>text</li>'.
'<li>½ of this is <strong>strong</strong</li></ul>');
foreach ($doc->getElementsByTagName('li') as $node)
{
echo htmlentities(iconv('UTF-8', 'ISO-8859-1', $node->nodeValue)), "\n";
}
?>
通过以下命令php -f test.php > res.html
出现在文件res.html中,其中包含text
。
我还检查了xml
模块是否已加载。
因此,如果我理解正确的DOMDocument(),那么一般情况下是可行的,但在所涉及的文件中则不能。为什么?
UPD 。我不确定,但这似乎是无法正确加载图像的原因。
答案 0 :(得分:1)
很遗憾,DOMDocument
仍然无法解析html5文档。您需要处理以下问题所示的静默错误机制解决方法: