$string = '<p><a href="http://example.com">Link</a></p>'; // via $_POST['post-content']
$dom = new DOMDocument();
$dom->loadHTML($string);
$allowed_attributes = array('id','href', 'src', 'class', 'style', 'colspan', 'rowspan');
foreach($dom->getElementsByTagName('*') as $node){
for($i = $node->attributes->length -1; $i >= 0; $i--){
$attribute = $node->attributes->item($i);
if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute);
}
}
$html = $dom->saveHTML();
结果...
<p><a href="%5C%22http://example.com%5C%22">Link</a></p>
...
我尝试了html_entity_decode($ html),但它没有用。我不明白是什么导致了这个问题。我可以使用一些帮助。
答案 0 :(得分:0)
在使用wordpress过滤器时,我遇到了这个问题。在我的情况下,我发现内容通过加斜杠运行,而斜杠导致返回。上面的问题看起来像这样。
$string = stripslashes('<p><a href="http://example.com">Link</a></p>'); // via $_POST['post-content']
$dom = new DOMDocument();
$dom->loadHTML($string);
$allowed_attributes = array('id','href', 'src', 'class', 'style', 'colspan', 'rowspan');
foreach($dom->getElementsByTagName('*') as $node){
for($i = $node->attributes->length -1; $i >= 0; $i--){
$attribute = $node->attributes->item($i);
if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute);
}
}
// Dont forget to add the slashes back in
$html = addslashes($dom->saveHTML());