PHP - besoin d'un pro des expressions regulieres (perl ou php)

PHP - besoin d'un pro des expressions regulieres (perl ou php) - Programmation

Marsh Posté le 12-12-2001 à 00:54:53    

Salut a tous,
 
j'ai fini le script de mon forum et je rajoute quelques fonctions qui sont plus du luxe qu'autre chose comme des BBcode mais la j'ai quelques surprises .... je raconte :
 
quand un utilisateur veut rentrer du code (HTML/PHP ...) dans le corp de son message et pour eviter que le script du forum l'evalue il selectionne son code,clique sur un bouton et un script JS le met entre 2 balises BBcode :
[COD] [/COD]
 
a chaque affichage de la page des messages j'ai une page PHP qui contient toutes mes regexp pour le corp du message et j'ai celle ci pour le COD, la voici :
 

if( eregi("(.*)(\[COD\])(.+)(\[/COD\])(.*)",$tab 'message'],$temp ) ){
 
$tab['message']="$temp[1]<font face='Verdana' size=2 color='red'><blockquote><pre><hr><code>".htmlentities($temp['3'])."</code><hr></pre></blockquote></font>$temp[5]";
 
}

 
le probleme : en rajoutant juste cette regexp alors que j'en ai 60 pour les emoticones et 15 pour les BBcode elle me PLOMBE COMPLETEMENT les ressources et la page qui etait généré en 0.01 sec passe a 1.8 sec  :ouch:  :??:  :fou: ---->>> je multiplie le temps par 180 !!
 
pourquoi ? comment ? a cause de quoi ? ....
vous auriez une bonne solution pour contourner ce probleme ??
 
merci !

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 12-12-2001 à 00:54:53   

Reply

Marsh Posté le 12-12-2001 à 11:28:03    

j'espère que toutes tes regexp ne sont pas codés dans le même style...
 
essaye ca:
 
preg_replace("/\[COD\](.+)\[\/COD\]/si","<font face='Verdana' size=2 color='red'><blockquote><pre><hr><code>".htmlentities($1)."</code><hr></ pre></blockquote></font>",$tab[message]);
 
mais a mon avis c'est le htmlentities qui prend le plus de temps la dedans.

Reply

Marsh Posté le 12-12-2001 à 12:49:13    

Ou trouver une doc sur tous ce codes utilisé dans les fonctions d'expression regulière


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 12-12-2001 à 12:53:50    

lord ii a écrit a écrit :

Ou trouver une doc sur tous ce codes utilisé dans les fonctions d'expression regulière  




 
ben, sur le site officiel... entre autre.

Reply

Marsh Posté le 12-12-2001 à 15:00:13    

gizmo a écrit a écrit :

j'espère que toutes tes regexp ne sont pas codés dans le même style...
 
essaye ca:
 
preg_replace("/\[COD\](.+)\[\/COD\]/si","<font face='Verdana' size=2 color='red'><blockquote><pre><hr><code>".htmlentities($1)."</code><hr></ pre></blockquote></font>",$tab[message]);
 
mais a mon avis c'est le htmlentities qui prend le plus de temps la dedans.  




 
.... et comment je fais pour recup ce qui a devant et derriere ??
ben oui, je dois lui appliquer des modifs differentes -> nl2br pour 1 et 5 mais pas pour 3 par exemple ...etc  :ouch:  
en plus je vois que tu l'as pas testé sinon tu aurais remarqué qu'elle ne peut pas fonctionner avec un htmlentities()  :sarcastic:
sinon a fonction egal le preg_replace est + rapide que eregi mais j'utilise une autre + rapide quand c'est possible pour remplacer les [ B] [ /B] par exemple -> str_replace : je gagne environ 30% sur preg_replace a condition de pouvoir faire les remplacements 1 par 1

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 12-12-2001 à 15:11:09    

pff, t'es fatigant toi, au lieu de simplement remplacer les < par <  
non, bien sur que j'ai pas testé, j'ai pas que ca a foutre non plus.

Reply

Marsh Posté le 12-12-2001 à 16:34:47    

:non:  
 
bon ben je remarque que tu reponds sans réfléchir en plus :sarcastic:  :D car  
le probleme n'est pas la -> en utilisant cette fonction le code qui est passé DANS le htmlentities (pas autour) n'est jamais evalué ... pour t'en convaincre remplace le htmlentities par un md5 par exemple et tu comprendras que cette fonction ne peut pas etre utilisé !
 
si tu as pas compris je develloppe : la valeur \\1 passé comme ca htmlentities("\\1" ) n'est pas traité par le htmlentities, c'est bon, tu imprimes  :??:  :lol:

Reply

Marsh Posté le 12-12-2001 à 16:39:39    

ben oui, j'ai bien compris, il n'empèche que htmlentities est nettement plus lourd que le bête remplacement de "<" que tu peux faire avec un simple preg_replace.

Reply

Marsh Posté le 12-12-2001 à 20:08:44    

ah ok !!!!!!
je pensais que tu etais partie dans l'autre sens  :ange:  
j'ai pas fait de bench sur htmlentities .... ben tient, je vais en faire un tout de suite :
 
voici sur quoi j'ai fait le bench :
 
$mess='<br><p><h3></h3><a href="toto">lien</a>  
<table><tr>
<td></td><td></td><td></td><td> </td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td>td> </td><td></td><td></td>
</tr></table>';
 
bench a vide pour 100 boucles :  0.014283916966083 sec
en rajoutant $mess=htmlentities($mess) : 0.016345954 sec
avec  
$mess=str_replace('<','X',$mess);
$mess=str_replace('>','X',$mess);
0.019518813 sec
 
et pour finir  
$mess=preg_replace ('|<|','X',$mess);
$mess=preg_replace ('|>|','X',$mess);
0.021766663
 
comme tu vois le htmlentities est la fonction la + optimisé pour faire ca car elle est PREVU POUR sans compter qu'elle remplace aussi les ' et " + tous les caracteres ayant une valeur en HTML éçèêô ......etc

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed