Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2007, 20h38   #1
Futur Membre du Club
 
Inscription : avril 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 47
Points : 19
Points : 19
Par défaut [bbcode] marche pas bien avec associations

Bonjour tout le monde :-°

J'ai fait une petite fonction Ecodage pour le bbcode et j'ai un soucis:

Voici la fonction

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function Encodage($texte)
{
$texte = preg_replace('#:\)#i', '<img src="images/smile_content.png" alt=":-)"/>', $texte);
$texte = preg_replace('#:p#i', '<img src="images/smile_p.png" alt=":p"/>', $texte);
$texte = preg_replace('#;\)#i', '<img src="images/smile_clin.png" alt=";)"/>', $texte);
$texte = preg_replace('#:d#i', '<img src="images/smile_d.png" alt=":D"/>', $texte);
$texte = preg_replace('#8-\)#i', '<img src="images/smile_lunettes.png" alt="8-)"/>', $texte);
$texte = preg_replace('#:\(#i', '<img src="images/smile_fache.png" alt=":-("/>', $texte);
 
//Traitement du texte
$texte = preg_replace('#\[b\](.+)\[/b\]#i', '<strong>$1</strong>', $texte);//Gras
$texte = preg_replace('#\[i\](.+)\[/i\]#i', '<em>$1</em>', $texte);//Italique
$texte = preg_replace('#\[s\](.+)\[/s\]#i', '<span class="souligne">$1</span>', $texte);//Souligné
$texte = preg_replace('#\[aligne=(.+)\](.+)\[/aligne\]#i', '<div class="$1">$2</div>', $texte);//Allignement
$texte = preg_replace('#\[couleur=(.+)\](.+)\[/couleur\]#i', '<span class="$1">$2</span>', $texte);//Couleur
 
 
//Traitement des titres
$texte = preg_replace('#\[titre=grand\](.+)\[/titre\]#i', '<h2 class="titre">$1</h2>', $texte);//Titre grand
$texte = preg_replace('#\[titre=normal\](.+)\[/titre\]#i', '<h3 class="titre">$1</h3>', $texte);//Titre normal
$texte = preg_replace('#\[titre=petit\](.+)\[/titre\]#i', '<h4 class="titre">$1</h4>', $texte);//Titre petit
 
//Traitement des liens
$texte = preg_replace('#\[url=(.+)\](.+)\[/url\]#i', '<a href="$1">$2</a>', $texte);//Liens
 
//Traitement des images
$texte = preg_replace('#\[img\](.+)\[/img\]#i', '<img src="$1" alt="image_user"/>', $texte);//Images
$texte = preg_replace('#\[aligne=(.+)\](.+)\[/aligne\]#i', '<span class="$1">$2</span>', $texte);//Allignement des images
 
 
return $texte;
}
Le soucis vient quand j'associe plusieurs balises: par exemple

[aligne=alignD][img][/img][/aligne]

Je me demande si vous connaissez le problème et surtout sa solution...
Est ce que ça vient de l'ordre des preg_replace dans le code par exemple?

Merci d'avance pour votre aide.
Woufeigh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 11h05   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est à dire ? Je pense que vous allez avoir un problème avec la gourmandise de l'expression régulière car par exemple le texte suivant : "{b}gras1{/b} et {b}gras2{/b}" va vous être actuellement affiché comme "gras1 et gras2" au lieu de "gras1 et gras2". En effet, les expressions régulières sont par défaut gourmandes, comportement où la chaîne la plus longue correspondant au motif est recherchée : pour inverser cette tendance vous pouvez utiliser l'option U.

Pour information, une source similaire est présentée dans la FAQ.

Par ailleurs, savez-vous qu'au lieu de faire de multiples preg_replace vous avez la possibilité d'utiliser un tableau pour les paramètres pattern et replacement ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 00h11   #3
Futur Membre du Club
 
Inscription : avril 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 47
Points : 19
Points : 19
Merci julp pour toutes vos précisions.

Je vais essayer de rajouter l'option U, je l'avais vue sur un code du genre mais je ne voyais pas la raison alors je ne l'ai pas mise.

Quant au tableau j'y ai pensé mais je n'ai pas vu ce que ça apportait...

Est que j'y gagne quelque chose au niveau vitesse par exemple?

Edit: J'ai rajouté un "s" en plus du "U" pour le multiligne et tout s'enchevêtre très bien maintenant

Encore une fois merci pour votre intervention
Woufeigh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 11h50   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404


Citation:
Envoyé par Woufeigh
Quant au tableau j'y ai pensé mais je n'ai pas vu ce que ça apportait...
Plus lisible peut être : vous n'avez plus qu'un preg_replace à faire. Côté performances je ne sais pas si cela change réellement quelque chose n'ayant pas fait le test ... L'important c'est que vous vous y retrouviez
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 20h32   #5
Futur Membre du Club
 
Inscription : avril 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 47
Points : 19
Points : 19
C'est bien ce que je me disais.

Encore une fois merci.
Woufeigh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h17.


 
 
 
 
Partenaires

Hébergement Web