删除 html 不支持的标签(简单 HTML Dom)
Remove unsupported tags of html (Simple HTML Dom)
我想删除用户插入的 html 不支持的标签(系统定义支持哪个标签),示例系统仅支持 "div”标签:
<div><span>Hello</span> <span>World</span></div>
将转换为:
<div>Hello World</div>
这是我的简单代码 HTML DOM:
function main()
{
$content = '<div><span>Hello</span> <span>World</span></div>';
$html = str_get_html($content);
$html = htmlParser($html);
}
function htmlParser($html)
{
$supportedTags = ['div'];
foreach ($html->childNodes() as $node) {
// Remove unsupported tags
if (!in_array($node->tag, $supportedTags)) {
$node->parent()->innertext = str_replace($node->outertext, $node->innertext, $node->parent()->innertext);
$node->outertext = '';
}
if ($node->childNodes()) {
htmlParser($node);
}
}
return $html;
}
但是如果包含多个嵌套的不受支持的标签,事情就会出错,例如:
<div><span>Hello</span> <span>World</span> <span><b>!!</b></span></div>
它将被转换为
<div>Hello World <b>!!</b></div>
但预期结果是
<div>Hello World !!</div>
解决方法是什么?我应该继续使用 Simple HTML DOM 还是寻找其他方法来解决这个问题?
感谢您提前解决我的问题。
就我所知,你可以做到这一点。 strip_tags($html, '<div><b>');
经过一番努力,我发现我不应该编辑 $node->parent() 因为它在循环中并且应该首先加载 childNodes。代码应该是这样的:
function htmlParser($html)
{
$supportedTags = ['div'];
foreach ($html->childNodes() as $node) {
if ($node->childNodes()) {
htmlParser($node);
}
// Remove unsupported tags
if (!in_array($node->tag, $supportedTags)) {
$node->outertext = $node->innertext;
}
}
return $html;
}
我想删除用户插入的 html 不支持的标签(系统定义支持哪个标签),示例系统仅支持 "div”标签:
<div><span>Hello</span> <span>World</span></div>
将转换为:
<div>Hello World</div>
这是我的简单代码 HTML DOM:
function main()
{
$content = '<div><span>Hello</span> <span>World</span></div>';
$html = str_get_html($content);
$html = htmlParser($html);
}
function htmlParser($html)
{
$supportedTags = ['div'];
foreach ($html->childNodes() as $node) {
// Remove unsupported tags
if (!in_array($node->tag, $supportedTags)) {
$node->parent()->innertext = str_replace($node->outertext, $node->innertext, $node->parent()->innertext);
$node->outertext = '';
}
if ($node->childNodes()) {
htmlParser($node);
}
}
return $html;
}
但是如果包含多个嵌套的不受支持的标签,事情就会出错,例如:
<div><span>Hello</span> <span>World</span> <span><b>!!</b></span></div>
它将被转换为
<div>Hello World <b>!!</b></div>
但预期结果是
<div>Hello World !!</div>
解决方法是什么?我应该继续使用 Simple HTML DOM 还是寻找其他方法来解决这个问题?
感谢您提前解决我的问题。
就我所知,你可以做到这一点。 strip_tags($html, '<div><b>');
经过一番努力,我发现我不应该编辑 $node->parent() 因为它在循环中并且应该首先加载 childNodes。代码应该是这样的:
function htmlParser($html)
{
$supportedTags = ['div'];
foreach ($html->childNodes() as $node) {
if ($node->childNodes()) {
htmlParser($node);
}
// Remove unsupported tags
if (!in_array($node->tag, $supportedTags)) {
$node->outertext = $node->innertext;
}
}
return $html;
}