我正在搜索删除除锚标记中的href之外的所有属性的脚本。我发现一些脚本在我写的解决方案之后都非常相似。
$okattrs = array(
'a' => array('href' => true),
);
$content = '<div id="att"><a class="pl" title="hit me" id="myid" href="http://google.com" >Click On Google</a></div>';
$doc = new DomDocument();
$doc->loadHTML($content);
$a_tags = $doc->getElementsByTagName('a');
foreach($a_tags as $k => $a_tag_obj) {
foreach ($a_tag_obj->attributes as $name => $attrNode)
{
if (!isset($okattrs[$a_tag_obj->nodeName][$name]))
{
$a_tag_obj->removeAttributeNode($attrNode);
}
}
}
echo $content1=$doc->saveHTML();
现在我的问题是它只删除了第一个属性'class'。我调试,发现如果我删除行有removeAttributeNode循环工作正常4次,但如果使用此循环只工作一次,只删除第一个属性和休息。
之前有人遇到此问题或有解决方案吗?
答案 0 :(得分:0)
最后我让代码运行。只有一个更改将removeAttributeNode移动到另一个循环。
foreach($a_tags as $a_tag_obj) {
$attribute_list = array();
foreach ($a_tag_obj->attributes as $name => $attrNode) {
if (!isset($okattrs[$a_tag_obj->nodeName][$name])) {
$attribute_list[] = $name;
}
}
for($i=0;$i<sizeof($attribute_list);$i++) {
$a_tag_obj->removeAttribute($attribute_list[$i]);
}
}