Рекурсивно перебрать дерево DOM и удалить ненужные теги? - PullRequest
3 голосов
/ 30 декабря 2010
$tags = array(
    "applet" => 1,  
    "script" => 1
);

$html = file_get_contents("test.html");
$dom = new DOMdocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$body = $xpath->query("//body")->item(0);

Я собираюсь пройтись по «телу» веб-страницы и удалить все ненужные теги, перечисленные в массиве $ tags, но я не могу найти способ.Так как я могу это сделать?

Ответы [ 2 ]

6 голосов
/ 30 декабря 2010

Рассматривали ли вы Очиститель HTML ? начать с собственной очистки html - это просто заново изобрести колесо, и это нелегко сделать.

Кроме того, черный список также плох, см. SO / Why-use-a-whitelist-for-html-sanitizing

Вам также может быть интересно прочитать , как настроить допустимые теги и атрибуты или тестирование демонстрации HTML Purifier

5 голосов
/ 30 декабря 2010
$tags = array(
    "applet" => 1,  
    "script" => 1
);

$html = file_get_contents("test.html");
$dom = new DOMdocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

for($i=0; $i<count($tags); ++$i) {
   $list = $xpath->query("//".$tags[$i]);
   for($j=0; $j<$list->length; ++$j) {
      $node = $list->item($j);
      if ($node == null) continue;
      $node->parentNode->removeChild($node);
   }
}

$string = $dom->saveXML();

Что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...