Mar 28 2008

Remover atributos de tags HTML via expressão regular/PHP

Depois de muuuuito tempo, volto a postar no meu velho blog.
Li uma dúvida da lista de discussão PHP-SP do Yahoo e resolvi escrever este post.
Vejam a dúvida:

Pessoal,
Gostaria de saber se alguém aqui conhece uma forma de limpar os atributos da tags html.
Ex : Tenho essa div abaixo onde ela tá dentro de um conteudo preciso varrer esse conteudo e sair procurando todas as div’s que tenha atributos e tirar seus atributos.
Antes: <DIV style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY:Verdana">
Depois : <DIV>

Ob.: Já procurei no manual do PHP e achei essa função aqui strip_tags só que a mesma funciona pra tirar todas as tags html que tiver no texto.
Desde já agradeço pela ajuda.

Proponho fazer com que o seguinte código:

<div id="divId" class="class1 class2" width="50%" title="only test">
   <form name="formName" method="POST" action="lala.php">
      <fieldset id="fldId">
         <legend></legend>
         <label for="campo1">
            <span>Campo 1</span>
            <input type="text" name="campo1" id="campo1" class="text" maxlength="10" size="12" />
         </label>
         <br />
         <label for=campo2>
            <span   class=ispam >Campo 2</span>
            <input type='text' name="campo2" id="campo2" class="text" maxlength=10 size=12 />
         </label>
      </fildedset>
   </form>
</div>

Fique assim:

<div>
   <form>
      <fieldset>
         <legend></legend>
         <label>
            <span>Campo 1</span>
            <input/>
         </label>
         <br/>
         <label>
            <span>Campo 2</span>
            <input/>
         </label>
      </fildedset>
   </form>
</div>

Código PHP:

<?php

$htmlCode = <<<SAN
<div id="divId" class="class1 class2" width="50%" title="only test">
   <form name="formName" method="POST" action="lala.php">
      <fieldset id="fldId">
         <legend></legend>
         <label for="campo1">
            <span>Campo 1</span>
            <input type="text" name="campo1" id="campo1" class="text" maxlength="10" size="12" />
         </label>
         <br />
         <label for=campo2>
            <span   class=ispam >Campo 2</span>
            <input type='text' name="campo2" id="campo2" class="text" maxlength=10 size=12 />
         </label>
      </fildedset>
   </form>
</div>
SAN;

$regx = <<<REGX
/(<\w+)([=\w'"%\.\s])*(\/?>)/
REGX;

$x = preg_replace($regx, '$1$3', $htmlCode);

print <<<CODE
$htmlCode
$x
CODE;
?>

Testem o código e comentem possíveis bugs.
Espero ter ajudado