我想检查正文下的所有标签并检查并删除它是否具有我尝试过的样式属性
$user_submitted_html = "This is Some Text";
$html = '<body>' . $user_submitted_html . '</body>';
$dom = new DOMDocument();
$dom->loadHTML($html_string);
$elements = $dom->getElementsByTagName('body');
foreach($elements as $element) {
foreach($element->childNodes as $child) {
if($child->hasAttribute('style')) {
$child->removeAttribute('style')
}
}
}
如果$user_submitted_html
不仅是文本,它可以正常工作,意味着它是否有一些标签,但如果它只是文本,那么它会给出错误
Call to undefined method DOMText::hasAttribute()
然后我在 foreach 循环中得到 nodeName
echo "Node Name: " . $child->nodeName
它给出了
Node Name = #text
这是什么节点名称,我已经回显了其他节点,它给出了我熟悉的 div、span 等。我想知道哪些是 hasAttribute 不属于它们的元素,所以我可以在像这样使用 hasAttribute 之前设置一个条件
if($child->nodeName=="#text") {
continue; // skip to next iteration
}
if($child->hasAttribute('style')) {
.
.
.
或任何其他解决方案???
需要另外一项建议。如果我只从<div>,<span>,<p> and <a>
. 如果其余标签可以使用样式属性,它会不会受到 xss 的影响。