DOMDocument

时间:2015-06-10 04:12:55

标签: php

我正在使用DOMDocument在PHP变量$table_data_for_db中找到并删除一些我不想要的HTML元素。 $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在插入数据库之前摆脱不受欢迎的人,但这感觉就像一个黑客。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

saveHTML函数正在添加额外的代码。要确保它没有插入,请将其用于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