[PHP] Reg-ex ; Nettoyage de balise

Fermé
l4palme - 7 août 2008 à 20:20
 l4palme - 7 août 2008 à 20:50
Bonjour,
Bonjour,

J'aimerais nettoyer un tableau html de toutes les propriétés (id, class, valign, etc..) sauf les colspan et rowspan (puisque ça change la signification du tableau sans ceux-ci).

Voici un exemple de 'row' à nettoyer
  <tr>
    <td class="aaaa" id="jimbo"></td>
    <td></td>
    <td class="asdasd" colspan="3" id="asd">R&eacute;colte 2007</td>
    <td class="asdasd" colspan="3" id="asd">R&eacute;colte 2008</td>
  </tr>


pour devenir

  <tr>
    <td></td>
    <td></td>
    <td colspan="3">R&eacute;colte 2007</td>
    <td colspan="3">R&eacute;colte 2008</td>
  </tr>

Ainsi, je suis capable de conserver mes colspans et rowspans avec les expressions régulières suivantes :
$code = preg_replace( "#<td(.*?)(colspan=[\"\'].*?[\"\']).*?>#i", "<td $2>" , $code);
$code = preg_replace( "#<td(.*?)(rowspan=[\"\'].*?[\"\']).*?>#i", "<td $2>" , $code);


Par contre mon soucis survient lorsqu'il n'y a pas de colspan / rowspan. J'essayais de trier avec l'expression régulière suivante

$code = preg_replace( "#<td(.*?)>#i", "<td>" , $code);


Mais évidemment, ça retire mes rowspan et colspan.

J'aimerais donc savoir comment paufiner une requête afin que ça fasse exactement ce que je veux. (Il ne manque peut-être qu'une simple petite chose mais j'ignore quoi).

Merci d'avance
A voir également:

3 réponses

Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 211
7 août 2008 à 20:24
Sa fait longtemps que j'ai plus fais de Regex >.>
De mémoire je dirais:
$code = preg_replace( "#<td(.*?)([colspan=[\"\'].*?[\"\']]*).*?>#i", "<td $2>" , $code);
$code = preg_replace( "#<td(.*?)([rowspan=[\"\'].*?[\"\']]*).*?>#i", "<td $2>" , $code);


Je suis pas du tout sur malheuresement
0
Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 211
7 août 2008 à 20:35
Bon, c'est pas optimisé, mais sa marche:
$code = '<td sd sd colspan="2" fdfd rowspan="4" azer></td>';
$code = preg_replace( '#<td(.*)((colspan|rowspan)=[\"\'].*[\"\']).*((colspan|rowspan)=[\"\'].*[\"\'])(.*)>#i', "<td $2 $4>" , $code);


Edit: bon en fait sa marche pas.
0
Puisque les expressions régulières complexes ne sont pas faciles, j'ai inversé mon processus, au lieu de chercher à garder ce que je veux, j'élimine ce que je veux pas de cette façon :
$suppr=array('/[\s]{1}class=[\"\'].*?[\"\']/', '/[\s]{1}id=[\"\'].*?[\"\']/'); 
$code=preg_replace($suppr, '', $code);


Je retire aussi un caractère d'espacement avant chaque propriété sinon ça fait des balise avec des espaces vide comme ceci
<td   >


C'est peut-être pas aussi efficace qu'une expression régulière complexe mais vu la difficulté de la réalisée, c'est une petite méthode simple.

D'ailleurs, si quelqu'un connait la solution, fonctionnelle, il me fera grand plaisir de l'appliquer.

Merci
0