Pour codeur php ... purge de caractere espaces ...

  • Auteur de la discussion Auteur de la discussion Zecat
  • Date de début Date de début
WRInaute accro
Probleme posé :

$var="aaaaaaa : xxxxx zzzzz wwwww"

Donc pour résumer :

Une expression
Puis une serie d'espaces en nombre non connu
puis un :
Puis une serie d'espaces en nombre non connu
puis une autre expression

But : ramener la chose à :

$var2="aaaaaaa:xxxxx zzzzz wwwww"

Bien sur je peux boucler sur les octets un à un ou faire des str-replace dans un while mais bon on doit pouvoir faire plus propre et efficace (regex ?). Mais comme les regex et moi on est faché :mrgreen: (en fait on a jamsi commencer à se causer :roll: )

Note : il se peut que des fois il n'y ait des epsace que devant ou que derrière ou devant et derriere le :
 
WRInaute discret
Ceci devrait fonctionner :

Code:
list($chaine1,$chaine2) = explode(':',$var);
$chaine1 = trim($chaine1);
$chaine2 = trim($chaine2);
$var2 = $chaine1.':'.$chaine2;
 
WRInaute accro
Je viens de tester la solution de netek, ça fonctionne:
Code:
$var = "aaaaaaa : xxxxx zzzzz wwwww";
list($chaine1,$chaine2) = explode(':',$var);
$chaine1 = trim($chaine1);
$chaine2 = trim($chaine2);
$var2 = $chaine1.':'.$chaine2;
echo $var2;
Affiche: aaaaaaa:xxxxx zzzzz wwwww

list() et explode() c'est de la balle ;)
 
WRInaute discret
Ou ceci avec une expression régulière :

Code:
echo preg_replace('/^([^ ]+) *: *([^ ]+) *([^ ]+) *([^ ]+)$/', '\\1:\\2 \\3 \\4', $var);
 
WRInaute passionné
plus simple et plus rapide que les regexp

Code:
$var=str_replace("  "," ",$var);
$var=str_replace("  "," ",$var);

imparrable :mrgreen:
 
WRInaute accro
fandecine a dit:
plus simple et plus rapide que les regexp

Code:
$var=str_replace("  "," ",$var);
$var=str_replace("  "," ",$var);

imparrable :mrgreen:
heu t'es sur ... si y a 20 espaces devant le : ?
 
WRInaute passionné
si tu veux obtenir [space]:[space] oui je suis sur, si tu ne veux pas d'espace avant et après les : tu rajoute
Code:
$var=str_replace(" : ",":",$var);

testes et tu verra :wink:
 
WRInaute accro
fandecine a dit:
si tu veux obtenir [space]:[space] oui je suis sur, si tu ne veux pas d'espace avant et après les : tu rajoute
Code:
$var=str_replace(" : ",":",$var);

testes et tu verra :wink:
arf il a raison le bougre ... tu m expliques ? c'ets comme si str_replace bossait de façon recursive incluant dejà un while ! la deuxieme lame servant juste à la finition ...

Edit : heu non desolé ca marche pas ... c'ets bien ce que je pensais :

Code:
<?php
$var="aaaaaa***************:***************bbbbb ccccc ddddd";
$var=str_replace("**","*",$var);
echo ($var."<br>");
$var=str_replace("**","*",$var);
echo ($var."<br>");
?>

j'ai mis des etoiles pour qu'on voit mieux ... et a chaque passe il divise simplement le nombre de ** par deux ...
Avec des blancs c'est trompeur, on peu avoir l 'impression que c'est ok mais si on regarde le source de la page avec les echo, on voit que non ...
 
WRInaute accro
je vais garder la solution avec les trim (je ne connaissais pas ces 3 commandes) et comme de toute façon ensuite je decoupai deja sur le : ltrim et rtrim sont mes amis ... :wink:

Note : je viens de re verifier ta soluce fandecine, et comme c'est previsible ca fonctionne pas (ca reduit de moitié a chaque passe simplement).
 
WRInaute passionné
Zecat a dit:
je vais garder la solution avec les trim (je ne connaissais pas ces 3 commandes) et comme de toute façon ensuite je decoupai deja sur le : ltrim et rtrim sont mes amis ... :wink:

Note : je viens de re verifier ta soluce fandecine, et comme c'est previsible ca fonctionne pas (ca reduit de moitié a chaque passe simplement).

C'était la "joke" du jour, mais je vois que tu as vérifié dans le source :mrgreen:

Plus sérieusement, c'est bien avec les regexp qu'il faut faire mais les solutions citées plus haut ne marchent pas, celle ci marche:

Code:
$chaine = "  Bonjour   :  à      tous les      wrinautes !";  
$texte =str_replace(" : ",":", preg_replace('/\s{2,}/', ' ', $chaine));  
echo $texte;

et cette fois c'est pas une "joke" :wink:
 
WRInaute passionné
seebz a dit:
fandecine a dit:
Plus sérieusement, c'est bien avec les regexp qu'il faut faire mais les solutions citées plus haut ne marchent pas

Désolé de te contredire mais la solution que j'ai suggéré fonctionne bien : http://labs.seebz.net/tests/preg_space.php
(oui je sais, je lache pas le morceau :mrgreen: )

hé non ! :mrgreen:

Voici le code source de ta page :
Code:
  Bonjour:a     tous les      wrinautes !<hr><code><span style="color: #000000">
<span style="color: #0000CC">&lt;?php<br /><br />$chaine&nbsp;</span><span style="color: #006600">=&nbsp;</span><span style="color: #CC0000">"&nbsp;&nbsp;Bonjour&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tous&nbsp;les&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrinautes&nbsp;!"</span><span style="color: #006600">;&nbsp;<br />echo&nbsp;</span><span style="color: #0000CC">preg_replace</span><span style="color: #006600">(</span><span style="color: #CC0000">'`[\s]*:[\s]*`'</span><span style="color: #006600">,&nbsp;</span><span style="color: #CC0000">':'</span><span style="color: #006600">,&nbsp;</span><span style="color: #0000CC">$chaine</span><span style="color: #006600">);<br />echo&nbsp;</span><span style="color: #CC0000">'&lt;hr&gt;'</span><span style="color: #006600">;<br /><br /><br />echo&nbsp;</span><span style="color: #0000CC">highlight_file</span><span style="color: #006600">(&nbsp;</span><span style="color: #0000CC">__FILE__&nbsp;</span><span style="color: #006600">);</span>

</span>
</code>1
 
WRInaute accro
lol

Piégé de la meme façon par les espaces ... :mrgreen: Testez vos soluces avec des **, ca le fait mieux et ca evite de se faire pieger par les finesses d'affichage des navigateurs :wink: Donc je reste sur la soluce list + trim ... qui me va tres bien.
 
Discussions similaires
Haut