来自 DOMDocument 的输出问题


Issue with Output from DOMDocument

我正在使用DOMDocument来查找并删除一些我不想要的HTML元素,$table_data_for_db$table_data_for_db的原始版本带有一些我不想要的HTML标签。 因此,我使用以下代码来删除一些标签(以及这些标签中的内容),然后将剩余的 HTML 保存到我的数据库中。

这是我用来创建$table_data_for_db的代码...

    $table_data_for_db = $_POST['table_data'];
    $dom = new DOMDocument;
    $dom->loadHTML($table_data_for_db);
    $xPath = new DOMXPath($dom);
    $nodes = $xPath->query('//*[@id="problem_header"]');
    if($nodes->item(0)) {
        $nodes->item(0)->parentNode->removeChild($nodes->item(0));
    }
    $nodes = $xPath->query('//*[@id="border_row"]');
    if($nodes->item(0)) {
        $nodes->item(0)->parentNode->removeChild($nodes->item(0));
    }
    $nodes = $xPath->query('//*[@id="fraction_class"]');
    if($nodes->item(0)) {
        $nodes->item(0)->parentNode->removeChild($nodes->item(0));
    }
    $table_data_for_db = $dom->saveHTML();

问题是我得到这样的输出... 更多相同的...

<!DOCTYPE html...<html><head></head></html>不受欢迎的地方。

目前有一个解决方案,在插入数据库之前,我使用 str_replace 来摆脱不受欢迎的内容,但这感觉就像一个黑客。 有没有更好的方法可以做到这一点?

你为什么删除你的其他帖子?如果您想更改问题,只需使用编辑功能。无论如何,我对你的另一个答案如下:

它是保存HTML函数,它正在放入额外的代码。为了确保它不会放入,请将它用于您的 loadHTML 函数:

$dom->loadHTML($table_data_for_db, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

根据 http://php.net/manual/en/libxml.constants.php,您至少需要版本:PHP 5.4和Libxml 2.7.8