PHP警告DOMDocument :: loadHTML():第10行上的实体中的标记部分无效

时间:2018-08-28 11:50:16

标签: php xml html5 apache domdocument

这是第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>&frac12; 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 。我不确定,但这似乎是无法正确加载图像的原因。

1 个答案:

答案 0 :(得分:1)

很遗憾,DOMDocument仍然无法解析html5文档。您需要处理以下问题所示的静默错误机制解决方法: