148 votes

Suppression des espaces en excès dans une chaîne de caractères

Je reçois une chaîne de caractères à partir d'une requête de base de données, puis je supprime toutes les balises HTML, les retours de chariot et les nouvelles lignes avant de la placer dans un fichier CSV. Seulement, je n'arrive pas à trouver un moyen de supprimer les balises excès espace blanc de entre les cordes.

Quelle serait la meilleure façon de supprimer les caractères d'espacement internes ?

6 votes

Veuillez poster un échantillon de la corde originale et de la corde recherchée.

0 votes

Pouvez-vous également préciser comment doit être le résultat final ? Insérez-vous les virgules dans les données pour le CSV, les récupérez-vous dans une base de données contenant déjà des virgules, envoyez-vous des chaînes de caractères dans une fonction qui gère l'insertion CSV, etc.

0 votes

Ok le résultat final doit être une chaîne de caractères avec chaque mot séparé par un seul espace, pour l'instant il y a plusieurs espaces.

310voto

jW. Points 3430

Je ne sais pas exactement ce que vous voulez, mais voici deux situations :

  1. Si vous vous occupez seulement de l'excès whitespace au début ou à la fin de la chaîne, vous pouvez utiliser trim() , ltrim() o rtrim() pour l'enlever.

  2. Si vous avez affaire à des espaces supplémentaires dans une chaîne de caractères, envisagez l'utilisation de la fonction preg_replace de multiples whitespaces " "* avec un seul whitespace " " .

Exemple :

$foo = preg_replace('/\s+/', ' ', $foo);

63 votes

$foo = preg_replace( '/ \s +/', ' ', $foo ) ;

0 votes

En utilisant le $foo = preg_replace( '/\s+/', ' ', $foo ); tuera les effets de nl2br()

1 votes

Utilisez simplement nl2br avant d'utiliser preg_replace et tout devrait bien se passer.

53voto

Cory Dee Points 1527
$str = str_replace(' ','',$str);

Ou bien, remplacez par un trait de soulignement, & nbsp ; etc etc.

10 votes

Cela supprime tous les espaces blancs. Il veut juste normaliser la chaîne.

13 votes

Ce que je recherchais (même si ce n'était pas la question)

0 votes

@Gigala "Quelle serait la meilleure façon de supprimer les caractères d'espacement internes ?" était la question. Cette réponse y répond parfaitement.

30voto

Lukas Liesis Points 564

Aucun des autres exemples n'a fonctionné pour moi, j'ai donc utilisé celui-ci :

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

cela remplace toutes les tabulations, nouvelles lignes, doubles espaces, etc. par un simple espace.

0 votes

Merci, @wp78de mais pour une raison quelconque, j'ai eu des problèmes avec seulement \s+ . Bien que ce soit en 2014, alors peut-être que cela a changé, je n'ai pas touché à PHP au cours des 3 dernières années, je ne peux pas commenter mais je vais laisser la réponse actuelle tant que c'était une solution et peut encore l'être dans certains cas.

27voto

d-_-b Points 3491

$str = trim(preg_replace('/\s+/',' ', $str));

La ligne de code ci-dessus supprimera extra les espaces, ainsi que les espaces de début et de fin.

4voto

Sandip Layek Points 41
$str = preg_replace('/[\s]+/', ' ', $str);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X