Supprimer plusieurs espaces
Je suis $row['message']
à partir d'une base de données MySQL et j'ai besoin de supprimer tous les espaces comme \n
\t
et ainsi de suite.
$row['message'] = "This is a Text \n and so on \t Text text.";
doit être formaté de manière à:
$row['message'] = 'This is a Text and so on Text text.';
J'ai essayé:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
mais elle ne supprime pas \n
ou \t
, juste des espaces simples. Quelqu'un peut me dire comment faire cela?
- Le retour à la ligne et les tabulations sont entre guillemets simples, de sorte que vous voulez les littérale?
- J'ai corrigé le fait de citer le code de la sectin avec les \n et \t par des guillemets doubles.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin:
Vous utilisez
\s\s+
qui signifie espace blanc(espace, tabulation ou retour à la ligne), suivi par un ou plusieurs espaces. Ce qui signifie que de remplacer deux ou plusieurs espaces avec un seul espace.Ce que vous voulez est de remplacer un ou plusieurs espaces avec un seul espace, de sorte que vous pouvez utiliser le modèle
\s\s*
ou\s+
(recommandé)\s
pas compris la "verticale onglet"chr(11)
. Inclure aussi vous avez besoin d'utiliserspace
classe de personnage:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.php\r\n
avec un seul espace ` `null
, sens une erreur s'est produite.$row['message'] = 18; // $ro = null
while$row['message'] = '18'; // $ro = '18'
et$row['message'] = (string) 18; // $ro = '18'
' Text with a lot of spaces '
, il retourne' Text with a lot of spaces '
. J'attends'Text with a lot of spaces'
.trim()
.
. Normalement, ce ne serait pas grave, mais je suis d'exporter le résultat de texte d'un tableur Excel, et ceux
sont en train d'apparaître dans la cellule de feuille de calcul. C'est mauvais parce que la cellule de feuille de calcul texte va être utilisée pour imprimer des étiquettes de publipostage.
preg_replace(array('/\s{2,}| /', '/[\t\n]/'), ' ', $str)Ce sorties
\s
contient déjà des onglets et des nouvelles lignes, donc au-dessus de cette regex semble suffisant./m
l'habitude ont un effet qu'il n'y a pas^
ou$
ancres et les/u
n'aura aucun effet, sauf à ralentir légèrement et mourir si la chaîne d'entrée n'est pas valide UTF-8 (il n'a pas d'incidence sur ce\s
matches, mais il aurait une incidence sur\pZ
).simplifié à une seule fonction:
basé sur Danuel O'Neal réponse.
Je ne peux pas reproduire le problème ici:
Je ne suis pas sûr si c'était juste une erreur de transcription ou pas, mais dans votre exemple, vous êtes à l'aide d'une unique chaîne de caractères entre guillemets.
\n
et\t
ne sont traités que comme de nouvelle ligne et onglet si vous avez une double chaîne de caractères entre guillemets. Qui est:Modifier: comme Codaddict souligné,
\s\s+
ne remplacera pas un caractère de tabulation. Je ne pense toujours pas que l'aide\s+
est une solution efficace mais, alors, comment parler de cette place:Cela remplace tous les onglets, tous les retours à la ligne et toutes les combinaisons de plusieurs espaces, les tabulations et les retours à la ligne avec un seul espace.
Sans preg_replace()
Tous vous avez besoin est de l'exécuter comme suit:
C'est ce que je voudrais utiliser:
un. Assurez-vous d'utiliser des guillemets, par exemple:
b. Pour supprimer les espaces superflus, utilisation:
Il ne peut pas être la solution la plus rapide, mais je pense qu'il faudra le moins de code, et cela devrait fonctionner. Je n'ai jamais utilisé mysql, donc j'ai peut-être tort.
- Je utiliser ce code et modèle:
Vous pouvez le tester sur http://writecodeonline.com/php/
Sur la vérité, si pense que vous voulez quelque chose comme ceci:
ce sera de remplacer les onglets multiples avec un seul onglet
Sans preg_replace, avec l'aide de la boucle.