cs_f6xara
Messages postés68Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention 6 février 2008
-
13 déc. 2005 à 14:00
cs_f6xara
Messages postés68Date d'inscriptionsamedi 1 novembre 2003StatutMembreDerniè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
A voir également:
Expressions régulières pour la suppression de balises
cs_f6xara
Messages postés68Date d'inscriptionsamedi 1 novembre 2003StatutMembreDerniè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);
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 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...
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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)
cs_f6xara
Messages postés68Date d'inscriptionsamedi 1 novembre 2003StatutMembreDerniè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.