Comment supprimer tous les espaces d'une chaîne en PHP : du débutant à l'expert
\n\nImaginez la situation : vous recevez un numéro de téléphone saisi par un utilisateur, mais il l'a rempli d'espaces, de tabulations et de sauts de ligne. Ou vous analysez un fichier CSV dont les valeurs sont entourées d'espaces superflus. Vous reconnaissez ? La question "How do I strip all spaces out of a string in PHP?" sur Stack Overflow cumule des dizaines de milliers de vues — et ce n'est pas un hasard. Tout développeur PHP rencontre tôt ou tard le besoin de nettoyer une chaîne de ses caractères d'espacement.
\n\nAujourd'hui, nous ne nous contenterons pas d'une simple réponse. Nous allons mener une véritable enquête : analyser toutes les méthodes populaires, comparer leurs performances et déterminer laquelle utiliser dans vos projets réels. Préparez vos IDE — ça va être intéressant.
\n\nPourquoi ne pas utiliser trim()
\n\nCommençons par une erreur courante. Beaucoup de débutants écrivent :
\n\n$clean = trim($dirty);\n\nEt pensent que le problème est réglé. Mais trim() ne supprime les espaces qu'au début et à la fin de la chaîne. Si des espaces se trouvent à l'intérieur, ils restent en place. C'est comme balayer uniquement le pas de la porte en laissant toute la saleté au milieu de la pièce.
Pour notre tâche, nous avons besoin d'outils plus puissants. Examinons trois approches principales pour supprimer tous les espaces d'une chaîne en PHP.
\n\nMéthode 1 : str_replace — le roi de la simplicité
\n\nLa méthode la plus évidente et la plus utilisée est la fonction str_replace(). Elle remplace toutes les occurrences d'une sous-chaîne par une chaîne vide. Simple comme bonjour :
<?php\n$string = "Bonjour tout le monde ! Comment ça va ?";\n$no_spaces = str_replace(' ', '', $string);\necho $no_spaces; // "Bonjourtoutlemonde!Commentçava?"\n?>\n\nCependant, il y a une nuance. str_replace() ne supprime que les espaces ordinaires (caractère de code 32). Qu'en est-il des tabulations, des espaces insécables ou des sauts de ligne ? Pour un nettoyage complet, il faut passer un tableau :
<?php\n$string = "Bonjour\\ttout le monde !\\nComment ça va ?";\n$remove = [' ', "\\t", "\\n", "\\r"];\n$no_spaces = str_replace($remove, '', $string);\necho $no_spaces; // "Bonjourtoutlemonde!Commentçava?"\n?>\n\nAvantages : grande vitesse, code lisible.
\nInconvénients : nécessite de lister explicitement tous les types d'espaces.
Et str_ireplace alors ?
\n\nCertains développeurs confondent str_replace avec str_ireplace. La seconde fonction fait la même chose, mais sans tenir compte de la casse. Pour les espaces, cela ne change rien — un espace n'a pas de casse. Utilisez donc str_replace sans hésiter.
Méthode 2 : preg_replace — la puissance des expressions régulières
\n\nLorsque vous devez supprimer tous les caractères d'espacement d'un coup, les expressions régulières viennent à la rescousse. La classe de caractères \\s inclut l'espace, la tabulation, le saut de ligne, le retour chariot et même la tabulation verticale :
<?php\n$string = "Bonjour\\ttout le monde !\\nComment ça va ?";\n$no_spaces = preg_replace('/\\s+/', '', $string);\necho $no_spaces; // "Bonjourtoutlemonde!Commentçava?"\n?>\n\nNotez le signe plus (+) après \\s. Il signifie "un ou plusieurs caractères d'espacement". Si vous écrivez simplement /\\s/, chaque caractère d'espacement sera remplacé individuellement — cela fonctionne aussi, mais est légèrement plus lent.
Avantages : polyvalence, couvre tous les types d'espaces.
\nInconvénients : environ 2 à 3 fois plus lent que str_replace sur de gros volumes de données.
Quand choisir preg_replace
\n\nUtilisez cette méthode si :
\n- \n
- Vous ne savez pas exactement quels caractères d'espacement peuvent apparaître \n
- Vous devez supprimer tous les caractères "invisibles", y compris les rares (comme l'espace insécable Unicode) \n
- Vous traitez des chaînes provenant de sources externes (API, parsing HTML) \n
Méthode 3 : strtr — le cheval sombre
\n\nPeu de gens le savent, mais PHP dispose de la fonction strtr() (