我正在使用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