2010-03-03 15 views
138

J'essaie de remplacer plusieurs espaces par un seul espace. Quand j'utilise ereg_replace, j'obtiens une erreur à ce sujet étant obsolète.php Remplacer plusieurs espaces avec un seul espace

ereg_replace("[ \t\n\r]+", " ", $string); 

Y at-il un remplacement identique pour cela. J'ai besoin de remplacer plusieurs espaces blancs " " et plusieurs espaces blancs nbsp avec un seul espace blanc.

Répondre

297

Utilisez preg_replace() et au lieu de [ \t\n\r] utilisation \s:

$output = preg_replace('!\s+!', ' ', $input); 

De Regular Expression Basic Syntax Reference:

\ d \ w et \ de

classes de caractères sténographie correspondant à chiffres, caractères de mot (lettres, chiffres et traits de soulignement), et blanc espace (espaces, tabulations et ligne pauses). Peut être utilisé à l'intérieur et classes de caractères à l'extérieur.

+0

@Cletus: Celui-ci remplacerait un seul espace par de l'espace. Ne pensez-vous pas quelque chose comme: preg_replace ('/ (?: \ S \ s + | \ n | \ t) /', '', $ x) sera plus * efficace * surtout sur du texte avec plusieurs espaces simples? – codaddict

+21

@codaddict: par hasard, il y a un instant, j'ai comparé ceux sur des données réelles, résultat (pour les appels sur ~ 8300 articles de texte différents): '/ (?: \ S \ s + | \ n | \ t) /' = > 1410 (le plus lent), '/ \ s + /' => 611 (ok'ish), '/ \ s \ s + /' => 496 (le plus rapide). Le dernier ne remplace pas le simple '\ n' ou' \ t', mais c'est bon pour mon cas. – Frunsi

+13

/\ s {2,}/u '- si vous avez un problème d'UTF-8, ajoutez/u pour passer d'unicode à – user956584

33
preg_replace("/[[:blank:]]+/"," ",$input) 
+3

Ne remplace pas "\ n" (PHP 5.3), "/ \ s + /" fait le travail. ;) – Marek

+1

En fait, cela a aidé, \ s foiré mon mot multi-octets, en remplaçant Š avec une sorte de carré. –

+0

@ MārtiņšBriedis Il existe une fonction multi-octets séparée: http://php.net/manual/en/function.mb-ereg-replace.php –

29
$output = preg_replace('/\s+/', ' ',$input); 

\ s est un raccourci pour [ \t\n\r]. Les espaces multiples seront remplacés par un espace unique.