Usando DOMDocument + DOMXPath para remover todos os tags e atributos específicos do HTML

0

Eu tenho um corpo HTML arbitrário e preciso processá-lo no PHP para remover todas as tags, exceto algumas "bem conhecidas" ( < h1 > < h2 > < h3 > < h4 > < ul > ;

  • ol < li < p < g < b > < i > < i > < i > < < sub > < table > < th > & lt ; tr > < td > < blockquote > e suas tags de fechamento) e todos os atributos, exceto o atributo href de < a > , e retornam qualquer HTML restante como uma string. Eu também preciso remover manualmente qualquer hrefs diferente de "(https?|ftp)://.*" , mas esse seria o único trabalho de regex restante.

    Eu não preciso verificar a validade geral do HTML, abrir / fechar tag matching etc, o HTML deve ser confiável e isso é principalmente para remover tags e atributos indesejados, deixando nada além de texto simples e alguns dos mais básicos elementos.

    Eu comecei usando strstr () para obter o corpo HTML, depois strip_tags () para remover todas, exceto as tags dadas, então regex para remover todos os atributos, exceto para HREF, e último converter todos os demais < para & lt; (diferente de tags conhecidos) como uma rodada final de sanitização de entrada. Mas um comentário sugeriu o uso de DOMDocument e DOMXPath, não de regex, para qualquer processamento HTML.

    Parece uma boa ideia usar as ferramentas certas, mas não consigo descobrir como usá-las. Como posso usá-los para remover todos esses elementos específicos, além de remover todos os atributos de todos os elementos, exceto href in, da minha string HTML?

    Atualização: é um patch proposto para um projeto de terceiros existente e não consigo importar pacotes como o HTML Purifier, caso ainda não estejam lá. Eu tenho PHP DOM, e algumas outras extensões PHP, mas manipulação padrão PHP + XML + DOM parece ser o kit de ferramentas que tenho disponível para isso.

        
  • por Stilez 01.06.2017 / 15:24

    0 respostas

    Tags