我正在使用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
在插入数据库之前摆脱不受欢迎的人,但这感觉就像一个黑客。有更好的方法吗?
答案 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