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 > ; "(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.