[php] probleme classique de forum : pros des regexp demandés!

probleme classique de forum : pros des regexp demandés! [php] - Programmation

Marsh Posté le 19-11-2001 à 18:16:26    

comment faire pour découper un message pour ne pas foutre en l'air toute la mise en page des tableaux, quand l'auteur omet de mettre des espaces (le salaud :D)
 
y a rien d'autre que de compter et insérer des sauts de lignes tous les X caractères?

 

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

Reply

Marsh Posté le 19-11-2001 à 18:16:26   

Reply

Marsh Posté le 19-11-2001 à 18:22:19    

doit y a voir moyen, ici ils le font, non?
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
lalalalalalalalalalalalalalalalalalalalalalalalala
 
 
oui

 

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

Reply

Marsh Posté le 19-11-2001 à 18:24:40    

sous ie, tu peux rajouter dans le style de la table word-break: break-all; qui fera le break automatiquement.
 
sinon en CSS2 y'a table-layout: fixed qui, associé à une table ayant une largeur spécifiée (width='600' par ex) gardera cette largeur quelles que soient les longueurs des mots.
 
tu peux combiner les deux.

 

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

Reply

Marsh Posté le 19-11-2001 à 18:29:44    

thx  :jap:  je test ca :)

Reply

Marsh Posté le 20-11-2001 à 15:24:36    

et y aurait pas un truc pour que ça coupe pas les mots qui sont en bout de ligne mais ki sont assez court kan même hein?? :??:  
 
je sais pas si c comprehensible tout ça  :sol:

Reply

Marsh Posté le 20-11-2001 à 15:42:50    

avec une expression régulière tu ajoute un espace (ou un <br> ) si jamais plus de X caractère se suivent sans trou.
 
$Texte = eregi_replace("([a-z0-9]{40})","\\1<br>",$Texte) ;  
 
ça marche pas trop mal..


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 20-11-2001 à 15:50:29    

:jap:  vais essayer ça

Reply

Marsh Posté le 22-11-2001 à 19:17:30    

Sh@rdar a écrit a écrit :

avec une expression régulière tu ajoute un espace (ou un <br> ) si jamais plus de X caractère se suivent sans trou.
 
$Texte = eregi_replace("([a-z0-9]{40})","\\1<br>",$Texte) ;  
 
ça marche pas trop mal..  




 :jap:  
c bien, mais ca ne prend pas les special chars... comment faire dans l'autre sens (je suis pas loin en regexp)
cad remplacer une suite de 40 * TOUT sauf espace ?
 
[^ ]  ??

 

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

Reply

Marsh Posté le 22-11-2001 à 19:26:28    

$texte = eregi_replace("([^ ]{50})","\\1<br>",$texte);
 ca marche nickel mais j'ai du changer d'autres expressions régulières que je faisais...

 

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

Reply

Marsh Posté le 22-11-2001 à 19:55:33    

... avec ca comment faire pour pas qu'il remplace les http:// , ftp:// et <img src..
 
 :jap:
test:
 
http://aaaaaaaaaaaaaaaaaaaaaaaaaaa [...] aaaaaaaaaa
 
ah bah vi, ca marche :D
 
c sans solution ce probleme

 

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

Reply

Marsh Posté le 22-11-2001 à 19:55:33   

Reply

Marsh Posté le 22-11-2001 à 20:02:42    

tiens chui gentil je te donne ceux de mon forum
 
 $texte = preg_replace("/\[b\](.*?)\[\/b\]/si", "<B>\\1</B>", $texte);
  $texte = preg_replace("/\[i\](.*?)\[\/i\]/si", "<I>\\1</I>", $texte);
 $texte = preg_replace("/\[img\](.*?)\[\/img\]/si", "<IMG SRC=\"\\1\" BORDER=\"0\">", $texte);
 $texte = preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\"\\1\" target=\"_blank\" class=titre>\\1</a>", $texte);

Reply

Marsh Posté le 22-11-2001 à 20:07:17    

par contre moi la cassure des longs mots me casse aussi les posts normaux ... :(

Reply

Marsh Posté le 22-11-2001 à 20:28:41    

skylight a écrit a écrit :

tiens chui gentil je te donne ceux de mon forum
 
 $texte = preg_replace("/\[b\](.*?)\[\/b\]/si", "<B>\\1</B>", $texte);
  $texte = preg_replace("/\[i\](.*?)\[\/i\]/si", "<I>\\1</I>", $texte);
 $texte = preg_replace("/\[img\](.*?)\[\/img\]/si", "<IMG SRC=\"\\1\" BORDER=\"0\">", $texte);
 $texte = preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\"\\1\" target=\"_blank\" class=titre>\\1</a>", $texte);  




mais la cassure la dedans???
les http, ftp, img, soulignes, gras, italiques j'ai déjà ;)

 

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

Reply

Marsh Posté le 22-11-2001 à 20:34:26    

sisicaivrai a écrit a écrit :

... avec ca comment faire pour pas qu'il remplace les http:// , ftp:// et <img src..
 
 :jap:  




 
 
 
opps j'avai pas vu ca :)

Reply

Marsh Posté le 22-11-2001 à 20:35:39    

d'ailleurs c koi la différence entre preg et ereg(i) ?

Reply

Marsh Posté le 22-11-2001 à 20:42:02    

- string ereg_replace (string pattern, string replacement, string string)
 
ereg_replace() effectue une recherche par expression régulière dans la chaîne string en recherchant les occurrences de pattern, puis les remplace par la chaîne replacement.  
 
 
-mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
 
preg_replace() analyse subject pour trouver l'expression pattern et remplace les résultats par replacement.  
 
preg_replace n'est donc pas une fonction par expression régulière "au sens 1er du terme"  
 
mais chais pas si pour les utilisateurs ca change bcp...

 

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

Reply

Marsh Posté le 22-11-2001 à 21:02:10    

Waouw, vous pouvez pas savoir comment je suis content! grace a vous je viens de découvrir qu'on peux utiliser les expressions régulières Perl sous php et pas se contenter de cette merde de POSIX. Ca va grandement me facilité la tache :D
 
 :jap:  :jap:  :jap:

Reply

Marsh Posté le 22-11-2001 à 21:06:21    

gizmo a écrit a écrit :

Waouw, vous pouvez pas savoir comment je suis content! grace a vous je viens de découvrir qu'on peux utiliser les expressions régulières Perl sous php et pas se contenter de cette merde de POSIX. Ca va grandement me facilité la tache :D
 
 :jap:  :jap:  :jap:  




c'était avec plaisir  :sol:  
 
un dernier pour la route:
http://aaaaaaaaaaaaaaaaaaaaaaaaaaa [...] aaaaaaaaaa
 
:D

Reply

Marsh Posté le 22-11-2001 à 21:19:18    

par contre j'ai quand même une question, skykigth, il sert a quoi le "s" dans /si ? le i je connais, comme le e ou le g, mais le s j'ai jamais vu.

Reply

Marsh Posté le 22-11-2001 à 21:53:12    

Reply

Marsh Posté le 22-11-2001 à 22:15:13    

non, j'ai trouvé, c'est le s que je mettais d'habitude au début, c'est pour considerer le texte comme une seule ligne et forcer le "." a être n'importe quel char. mais je savais pas qu'on pouvait le mettre en fin d'expression.

Reply

Marsh Posté le 22-11-2001 à 22:16:42    

j'ai une question:
j'ai un char avec du htmlentities dedans, si je fais un echo, c ok, mais si j'envoie un mail avec le texte dedans -> affichage des codes. Comment l'en empecher?

Reply

Marsh Posté le 22-11-2001 à 22:48:48    

sisicaivrai a écrit a écrit :

j'ai une question:
j'ai un char avec du htmlentities dedans, si je fais un echo, c ok, mais si j'envoie un mail avec le texte dedans -> affichage des codes. Comment l'en empecher?  




 
pardon ?
ou sinon tu créé une 2° variable auquel tu fais un coup de htmlspecialchar() ... ?
 
sinon g pa compris la question :D

Reply

Marsh Posté le 22-11-2001 à 22:50:06    

par contre g un pb avec mon forum
 
http://e-sky.dyndns.org/forum/foru [...] nfig=forum
 
regardez, a un moment je poste un lien. et c'est pas le bon texte qui est affiché.. suffit de cliquer sur "EDIT" pour voir le vrai lien que g mis
 
je comprend pas sur ce coup :??:
pourtant j'utilise les expr reg que g cité ci dessus.

Reply

Marsh Posté le 22-11-2001 à 22:55:07    

à cause de ça : cla<br>ss=titre> c'est de ma faut ma regexp déconne... faut perfectionner ce truc un peu sommaire (j'ai lancé ça comme ça moi  :D )


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 22-11-2001 à 22:58:08    

heu skylight tu pourrais me sortir ton code de regexp complet ?
 
à mon avis y a un prob au niveau de l'ordre (d'abord la cassure puis ensuite la tranformation en liens)
 
sinon faudrait modifier le bazar de manière à couper uniquement si y a pas de http:// ou www. devant (pour les url longues)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 22-11-2001 à 23:00:19    

skylight a écrit a écrit :

 
 
pardon ?
ou sinon tu créé une 2° variable auquel tu fais un coup de htmlspecialchar() ... ?
 
sinon g pa compris la question :D  




exemple:
j'ai une var $titre avec dedans écrit "spécial"
si je fais un écho-> ok
si j'envoie un mail avec $titre dedans -> spécial

Reply

Marsh Posté le 22-11-2001 à 23:03:20    

essaye en indiquant que le mail est au format html

Reply

Marsh Posté le 22-11-2001 à 23:21:44    

gizmo a écrit a écrit :

essaye en indiquant que le mail est au format html  




 :jap: ca marche  :sol:

 

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

Reply

Marsh Posté le 23-11-2001 à 00:00:10    

tant mieux.
 
Sinon j'ai une question: c'est moi qui fait une couille dans ma regexp ou bien preg_replace ne comprend pas l'attribut \b ?  
 
Parce que c'est la seule chose qui me résiste encore :sweat:

Reply

Marsh Posté le 23-11-2001 à 17:03:23    

Sh@rdar a écrit a écrit :

heu skylight tu pourrais me sortir ton code de regexp complet ?
 
à mon avis y a un prob au niveau de l'ordre (d'abord la cassure puis ensuite la tranformation en liens)
 
sinon faudrait modifier le bazar de manière à couper uniquement si y a pas de http:// ou www. devant (pour les url longues)  




 
 
ds l'ordre, (page forum2.php)
 

Code :
  1. $texte = ereg_replace("<","<",$texte);
  2. $texte = ereg_replace(">",">",$texte);
  3. $texte = preg_replace("(\n)","<br>",$texte);
  4. $texte = preg_replace("/\[b\](.*?)\[\/b\]/si", "<B>\\1</B>", $texte);
  5.  $texte = preg_replace("/\[i\](.*?)\[\/i\]/si", "<I>\\1</I>", $texte);
  6. $texte = preg_replace("/\[img\](.*?)\[\/img\]/si", "<IMG SRC=\"\\1\" BORDER=\"0\">", $texte);
  7. $texte = preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\"\\1\" target=\"_blank\" class=titre>\\1</a>", $texte);
  8. $texte = str_replace(":eil:", "<IMG src=\"images/smileys/666.gif\">", $texte);
  9. [...]smileys
  10. $texte = str_replace(":innocent:", "<IMG src=\"images/smileys/innocent.gif\">", $texte);
  11. eregi_replace("([^.]{60})","\\1<br>",$texte);

 

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

Reply

Marsh Posté le 23-11-2001 à 17:12:36    

ok tu devrais esasyer comme j'ai indiqué de mettre la cassure en first, sinon avec l'url plus le <a href...> ça fait vite 40-50 caractères et ça casse en plein milieu du lien..
 
gizmo j'en ai aucune idée j'utilise pas les regexp perl...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 23-11-2001 à 17:16:25    

mattez aussi le post en dessous du lien .. j'ai mis du texte normal, le pb c'est que ca fait trop zarb ds le tablo, je pige pa pkoi :(

Reply

Marsh Posté le 23-11-2001 à 17:16:45    

gizmo a écrit a écrit :

tant mieux.
 
Sinon j'ai une question: c'est moi qui fait une couille dans ma regexp ou bien preg_replace ne comprend pas l'attribut \b ?  
 
Parce que c'est la seule chose qui me résiste encore :sweat:  




il est censé faire koi ?

Reply

Marsh Posté le 23-11-2001 à 17:25:06    

c'est censé limité la recherche aux mots commencant ou finissant exactement par l'expression. Mais c'est pas grave, j'ai trouvé la solution: je met un blanc au début de mon message et alors mes trucs marchent dans 95% des cas. (pour les autres connerie, je m'en fous :D)
 
Si vous vouler, je peux vous montrer mes regexp.

Reply

Marsh Posté le 23-11-2001 à 17:39:15    

pkoi pas, j'ai montré les miens.
apparement le bug du texte qui ne colle pas a pu se résoudre...

Reply

Marsh Posté le 23-11-2001 à 17:45:35    

Code :
  1. $string=" $string";
  2. $search = array(
  3. "/</",
  4. "/>/",
  5. "/\[g\](.+?)\[\/g\]/si",
  6. "/\[i\](.+?)\[\/i\]/si",
  7. "/\[s\](.+?)\[\/s\]/si",
  8. "/\[img\](.+?)\[\/img\]/si",
  9. "/\[url\](http:\/\/|ftp:\/\/)(.+?)\[\/url]/i",
  10. "/\[url\](.+?)\[\/url]/i",
  11. "/\[url=(http:\/\/|ftp:\/\/)(.+?)\](.+?)\[\/url]/si",
  12. "/\[url=(.+?)\](.+?)\[\/url]/si",
  13. "/ (http:\/\/|ftp:\/\/)(\S+)/i",
  14. "/ (www)(\S+)/i",
  15. "/\[quote\]\s*(.+?)\[\/quote\]/si",
  16. "/  /",
  17. "/[a-z0-9:&;]{40}/i" );
  18. $replace = array(
  19. "<",
  20. ">",
  21. "<b>$1</b>",
  22. "<i>$1</i>",
  23. "<u>$1</u>",
  24. "<img src=\"$1\" border=0>",
  25. "<a href=\"$1$2\" target=\"_blank\" class=\"post\">$1$2</a>",
  26. "<a href=\"http://$1\" target=\"_blank\" class=\"post\">$1</a>",
  27. "<a href=\"$1$2\" target=\"_blank\" class=\"post\">$3</a>",
  28. "<a href=\"http://$1\" target=\"_blank\" class=\"post\">$2</a>",
  29. "<a href=\"$1$2\" target=\"_blank\" class=\"post\">$1$2</a>",
  30. "<a href=\"http://$1$2\" target=\"_blank\" class=\"post\">$1$2</a>",
  31. "<table width=\"75%\" class=\"post\"><tr><td><b>citation:</b><hr>$1<hr></td></tr></table>",
  32. "  ",
  33. "$0<br>" );
  34. $string = preg_replace($search,$replace,$string);
  35. $string=nl2br($string);

 

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

Reply

Marsh Posté le 23-11-2001 à 17:50:50    

ca m'a l'air propre tout ca... :jap:
 
dit moi gizmo, t'utilise une fonction  
 
 
mais en php, il n'y a pas main() {}... donc comment faire des fonctions ?
car si je fais une fonction, le php va quand meme lire et executer la fonction, meme si je lui dis pas de la lire ?  :heink:

Reply

Marsh Posté le 23-11-2001 à 17:53:39    

ya un bug dans tes ereg .. :D
 
 
tape un long mot de <<<<<<<<<<<<<<<<>>>>>>>>>>>>><<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>><
 
 
ca le coupe pas.. j'essaie de voir pourquoi ...

Reply

Marsh Posté le 23-11-2001 à 17:54:38    

non, les fonctions sont bien décrites par
 
function nom_de_la_fonction (arg1,arg2,...)
{
  retrun valeur (optionel)
}
 
et tu les appelles comme des fonctions classiques, autrement elles sont ignorées.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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