[Regex]Enlever tous les epaces blancs entre [ et ]

Enlever tous les epaces blancs entre [ et ] [Regex] - PHP - Programmation

Marsh Posté le 08-05-2007 à 20:55:08    

Salut,
 
Tout est dans le titre. Par exmple comment enlever un espace blanc dans [url= htt://monsite.com] ainsi que dans toutes les balise délimitées par [ et ].
 
Je n'y arrive pas, si quelqu'un peut m'aider.
Merci.

Reply

Marsh Posté le 08-05-2007 à 20:55:08   

Reply

Marsh Posté le 08-05-2007 à 23:27:52    

Est ce bien utile :??:
 
Ou bien la vrai question est :"comment s'affranchir des espaces dans une expression régulière pour gérer du code BB?"
 
En gros tu veux supprimer ou pourvoir détecter sans t'occuper des blancs?

Reply

Marsh Posté le 08-05-2007 à 23:36:01    

si c'est enlever pour réellement supprimer, par exemple [lambda=    aa  bb  cc] devient [lambda=aabbcc] alors un simple str_relace suffira...
$string = str_replace(" ","",$string);

Reply

Marsh Posté le 09-05-2007 à 00:36:04    

leflos5 a écrit :

Est ce bien utile :??:
 
Ou bien la vrai question est :"comment s'affranchir des espaces dans une expression régulière pour gérer du code BB?"
 
En gros tu veux supprimer ou pourvoir détecter sans t'occuper des blancs?


 
C'est parceque j'ai deux regex qui géres les url:  
Une qui transforme une url http://www.monsite.com en [xxx=http://www.monsite.com]http://www.monsite.com[/url]  
Une autre qui transforme [xxx=http://www.monsite.com]http://www.monsite.com[/url] en lien cliquable
Le problème est que si quelqu'un met un espace entre = et http:// mon code ne fonctionne plus. j'obtient exactement ca
[url= http://monsite.com]http://www.monsite.com[/url]. Tiens le forum aussi à ce genre de problème.  
 
J'aimerais donc suprimmer tous les espaces blancs dans mon bbcode pour ne plus avoir ce genre de problèmes. Est ce possible?  
 
PS: j'ai intentionnellement remplacé url par xxx pour des raisons d'affichge.
 

NewsletTux a écrit :

si c'est enlever pour réellement supprimer, par exemple [lambda=    aa  bb  cc] devient [lambda=aabbcc] alors un simple str_relace suffira...
$string = str_replace(" ","",$string);


Un str_replace ne fonctionnera pas puisque je ne veux pas supprimer tout les espaces de ma chaine de caractère mais seulement dans mes balises.

Reply

Marsh Posté le 09-05-2007 à 00:39:03    

Si c'est ça il suffit que tu prévois un éventuel (ou plusieurs) espace là où ils pourraient se trouver ;)
 
Ou sinon faut faire plus restrictif et ne pas permettre les espaces et que le code soit invalide et non transformé ;)

Reply

Marsh Posté le 09-05-2007 à 00:45:13    

J'ai en gros fait ca:
$chaine = preg_replace('#(http://[a-z0-9./_-]+)#i', '$1', $chaine);
$chaine = preg_replace('#\[url=(\s)*(http://(.+))\](.+)\[/url\]#iU', '<a href="$2">$4</a>', $chaine);
Ca fonctionne pour un lien sans tags mais ca ne fonctionne pas pour les liens du genre [xxx=http://monsite.com]cliquez ici[/url].
C'est vraiment un truc de tordus ces regex.

Reply

Marsh Posté le 09-05-2007 à 09:15:23    

http://www.regular-expressions.info/

 

Dans tous les cas t obtient un truc qui ressemble a ce que tu vx non ?

 

Si t as deja le  $chaine =  preg_replace(...)
Tu le fais *apres* le str_replace ... non ?

 

Edit: Fo matcher  [xxx=http://www.monsite.com]http://www.monsite.com[/url]   sans espace ?

 

La preg me soule des le matin ...

 

Au plus simple

Code :
  1. // $str = '[xxx= http://www.monsite.com]texte[/url]'
  2. // retour = [xxx= http://www.monsite.com] propre
  3. function segment1($str) {
  4. $tab = explode('=', substr($str, 0, strpos($str, ']')) );
  5. foreach($tab as $seg) {
  6.  $rez[] = htmlspecialchars( str_replace(array(' ', '[', ']'), '', $seg));
  7. }
  8. $chaine = '[' . implode('=', $rez) . ']';
  9. return $chaine;
  10. }
 

Ca te sort le 1er "[]" sans espace aucun, ensuite tu passes ta regex

  


Message édité par supermofo le 09-05-2007 à 22:31:53

---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
Reply

Sujets relatifs:

Leave a Replay

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