Expressions régulières pour la suppression de balises

Résolu
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008 - 13 déc. 2005 à 14:00
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008 - 15 déc. 2005 à 08:54
J'ai fait un module de template transformant tout ce qui se trouve entre {} par la variable équivalente.

Si la variable n'est pas trouvées, alors, on supprime dans le template les {} à l'aide d'une expression régulière ($texte = preg_replace('/{[^ \t\r\n}]+}/', "", $texte); )

Mais voilà, tout les scripts javascript contenant des {} sautent aussi (exemple function check(){ alert('oui'); } devient function check() )

Alors j'essaye mais en vain d'exclure de la première expression régulière tout ce qui se trouve entre les balises <script> et </script>

// l expression ci dessous retire les balises scripts mais je ne parviens pas à faire la fonction qui permet de ne pas y modifier
$search = array ('@{.*?}@si', '@<script.*?</script>@si');
$texte = preg_replace($search, array('', ''), $texte);

Merci d'avance à celui qui pourra m'aider

4 réponses

cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008
15 déc. 2005 à 08:54
Bon j'ai résolu mon problème et donne la solution pour ceux que ça pourrait interesser:

Quand une variable entre accolade dans mon template n'était pas renseignée, alors je la virais. Pour ça je remplaçais ce qui se trouvait entre accolade par rien :
$texte = preg_replace('@{.*?}@si', '', $texte );

alors pour garder le javascript, il fallait que je garde toutes les variables dont les accolades étaient suivies d'un retour à la ligne ou d'un espace :
{MAVAR} <- Variable de template
{
MAVAR
} ou { MAVAR } <- a garder tel quel

Pour ça j'ai utilisé l'expression :
$texte= preg_replace('/{[^ \t\r\n}]+}/', "", $texte);
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
13 déc. 2005 à 14:24
Et oui, et oui...



C'est le grand malheur des expressions régulières, elles ne gèrent pas
l'exculsion dune chaine complète. (ou si qq'un sait comment faire, je
suis preneur !!!)





Donc il faut feinter...



J'ai bien une méthode pour recréer cette fonctionnalité, mais le plus
simple serait de savoir par quoi sont identifiables les variable de tes
templates.



Par exemple, si tu les encadres avec : , il sera facile de les re-trouver...



'/{:[\S]+:}/'



=> connais-tu le \S qui veut dire "tout ce qui n'est pas un caractère blanc", soit : [^\n\r\t ] (et d'autres caractères)





Sinon, je peux te donner une piste pour recréer ton exclusion, mais
t'es mal barré car le javascript ne se trouve pas seulement entre des
balise <script>



ex : onclick=""



puis il y'a aussi le CSS enligne qui à des accolades...

Bref, je trouve que tu as mal choisi tes {} pour encadrer tes variables de templates...
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 déc. 2005 à 14:26
Change les démarquations de tes variables par autre chose... ça serait plus simple non... genre <{ma_var}> ou %ma_var%... enfin... ce que j'en dis... .. . ;o)

@ tchaOo°
0
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008
13 déc. 2005 à 16:36
En fait, il n'y a que des fonctions (pour les onclick , cela génère la fonction automatiquent et pour les style, c'est tout dans une css a part qui ne passe pas par le template).

J'ai mis d'autres caractères à la places des accolades, mais mon system de template gèrent les boucles et donc lors de l'execution du template mes délimiteurs (<%| |%>) sont remplacés par { }. Une fois sorti de la boucle, le contenu généré est parfois réappeler dans d'autres boucles et la je retombe sur le meme probleme.

Je ne vois alors comme solution d'exclure toutes les { } avec des retours chariots dedans, mais la je sèche aussi.
0
Rejoignez-nous