Expressions régulières - Parser du template HTML

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Expressions régulières - Parser du template HTML

Re: Expressions régulières - Parser du template HTML

par tominardi » 12 avr. 2010, 16:27

Bon tout s'est très bien passé pour l'intégration.

J'aurais de l'optimisation à faire plus tard, mais déjà, ça fonctionne, et bien !

Je suis très content, maintenant je passe à la suite ! ;)

Merci!

Re: Expressions régulières - Parser du template HTML

par tominardi » 12 avr. 2010, 11:47

Yes ça fonctionne :

Code : Tout sélectionner

<?php $texte='Je suis !%!CONTENU!!% trzès content !%!HEADER!!% et puis !%!MENU!!%'; class test { protected $nb=0; public function __construct($texte) { preg_replace_callback("/!%!(\w+)!!%/",array($this, 'traiteresult'),$texte); } public function traiteresult($solutions) { switch($solutions[1]) { case('CONTENU'):echo'ici le contenu de la page';break; case('MENU'):echo'accueil - histoire - contact';break; default:echo"je ne connais pas cette fonction";break; } $this->nb++; } public function getNb() { return $this->nb; } } $allez = new test($texte); echo $allez->getNb(); ?>
Là je me lance dans l'intégration des méthodes à mon contrôleur principal.
Je dois me remettre un peu dedans.
Je connaissais pas les méthodes statiques, donc je vais potasser un peu tout ça, voir si ça pourrait pas me servir.

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:39

Ensuite le fait de faire référence au nom de la classe plutôt qu'à l'objet : logiquement, on aurait du faire this->traiteresult.
si tu veux utiliser $this c'est :
preg_replace_callback("/!%!(\w+)!!%/", array($this, 'traiteresult'), $texte);

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:33

Je le sais parfaitement, mais je trouve la pratique à déconseiller: c'est moins clair, et on se demande toujours s'il faut ou non les échapper.
Il faudrait penser à utiliser un délimiteur correct dans tes expressions.
faudrait savoir... :shock:

Re: Expressions régulières - Parser du template HTML

par Berzemus » 12 avr. 2010, 11:32

Déjà utiliser les double deux points :: plutôt que ->.
Ensuite le fait de faire référence au nom de la classe plutôt qu'à l'objet : logiquement, on aurait du faire this->traiteresult.

Quelque chose m'échappe ?
C'est ce qu'on appèle un appel statique (on peut ainsi appeler des fonctions sans devoir instancier l'objet, bien pratique des fois):
http://www.manuelphp.com/php/language.oop5.static.php

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:31

t'es pas obliger d'utiliser une class pour faire ca
sinon pour les info du type callback c'est par ici : http://fr2.php.net/manual/fr/language.p ... s.callback

Re: Expressions régulières - Parser du template HTML

par tominardi » 12 avr. 2010, 11:30

Notre rôle n'est pas seulement de trouver une solution aux problèmes posés (pour ça, une recherche sur le web suffit quasi tout le temps), mais aussi d'apporter un avis, un conseil, bref, d'établir une relation d'humain à humain, l'essence même d'un forum.
Et merci pour ça ;)

Re: Expressions régulières - Parser du template HTML

par Berzemus » 12 avr. 2010, 11:29

mais non c'est correct, c'est pas pareil que les autres caractères
Je le sais parfaitement, mais je trouve la pratique à déconseiller: c'est moins clair, et on se demande toujours s'il faut ou non les échapper.

Alors voilà, je conseille l'utilisation des délimiteurs '#' (puisque Php le privilégie) et '/' (puisque historiquement, c'est ainsi que les expressions régulières sont délimitées, et qu'on retrouve la même notation dans les autres langages (Js, Perl, ...).

Notre rôle n'est pas seulement de trouver une solution aux problèmes posés (pour ça, une recherche sur le web suffit quasi tout le temps), mais aussi d'apporter un avis, un conseil, bref, d'établir une relation d'humain à humain, l'essence même d'un forum.

Re: Expressions régulières - Parser du template HTML

par tominardi » 12 avr. 2010, 11:27

Bon alors je me suis lancé dans la fonction preg_replace_callback et il y a un truc qui me chiffonne.

J'ai commencé à aller vers ma structure objet maintenant que j'ai testé ma fonction. Du coup j'ai fait ce code :

Code : Tout sélectionner

<?php $texte='Je suis !%!CONTENU!!% trzès content !%!HEADER!!% et puis !%!MENU!!%'; class test { public function __construct($texte) { preg_replace_callback("/!%!(\w+)!!%/","test::traiteresult",$texte); } public function traiteresult($solutions) { switch($solutions[1]) { case('CONTENU'):echo'ici le contenu de la page';break; case('MENU'):echo'accueil - histoire - contact';break; default:echo"je ne connais pas cette fonction";break; } } } $allez = new test($texte); ?>
Ce qui me pose soucis, c'est la manière d'appeler le callback : preg_replace_callback("/!%!(\w+)!!%/","test::traiteresult",$texte);
Déjà utiliser les double deux points :: plutôt que ->.
Ensuite le fait de faire référence au nom de la classe plutôt qu'à l'objet : logiquement, on aurait du faire this->traiteresult.

Quelque chose m'échappe ?

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:19

mais non c'est correct, c'est pas pareil que les autres caractères
vous pouvez utiliser les délimiteurs (), {}, [], et <>, comme en Perl.
http://fr2.php.net/manual/fr/intro.pcre.php
En complément des délimiteurs cités ci-dessus, il est aussi possible d'utiliser des parenthèses comme délimiteur où les parenthèses ouvrante et fermante sont respectivement les délimiteurs ouvrant et fermant.
http://fr2.php.net/manual/fr/regexp.ref ... miters.php

Re: Expressions régulières - Parser du template HTML

par Berzemus » 12 avr. 2010, 11:17

@Berzemus
tu parles du slash mis par stealth35 et que je n'ai pas mis moi ?
Délimiteurs

Lors de l'utilisation des fonctions PCRE, il est nécessaire que le motif soit encadré par des délimiteurs. Un délimiteur peut être n'importe quel caractère alpha-numérique autre qu'un backslash ou qu'un espace.

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:14

Sinon, l'option des expressions régulières n'est pas très performante (d'accord, elle est facile à mettre en place, mais elle est lente à l'usage). Donc si un solution plus performante t'intéresse, je ferais le traitement en brut, en utilisant des strpos() par exemple.
pour ce genre de chose non, le coup du strpos ca va être une catastrophe et en plus pas compatible UTF-8

Re: Expressions régulières - Parser du template HTML

par tominardi » 12 avr. 2010, 11:07

@stealth35

Effectivement, merci :D
ça m'embêtait effectivement d'aller vers un double traitement ! (rechercher, traiter et enfin remplacer)
ça va me faire un contrôleur à créer pour les plugins. Ça me semble propre.

@Berzemus
tu parles du slash mis par stealth35 et que je n'ai pas mis moi ?

Re: Expressions régulières - Parser du template HTML

par Berzemus » 12 avr. 2010, 11:05

Il faudrait penser à utiliser un délimiteur correct dans tes expressions.

Sinon, l'option des expressions régulières n'est pas très performante (d'accord, elle est facile à mettre en place, mais elle est lente à l'usage). Donc si un solution plus performante t'intéresse, je ferais le traitement en brut, en utilisant des strpos() par exemple.

Re: Expressions régulières - Parser du template HTML

par stealth35 » 12 avr. 2010, 11:02

je pense que preg_replace_callback devrais t'intéresser :wink: