Je viens $row['message']
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é pour:
$row['message'] = 'This is a Text and so on Text text.';
J'ai essayé:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
mais il ne supprime pas \n
ou \t
, juste des espaces simples. Quelqu'un peut-il me dire comment faire cela?
php
regex
string
preg-replace
whitespace
creativz
la source
la source
Réponses:
Vous avez besoin:
Vous utilisez
\s\s+
ce qui signifie un espace (espace, tabulation ou nouvelle ligne) suivi d'un ou plusieurs espaces. Ce qui signifie effectivement remplacer deux ou plusieurs espaces blancs par un seul espace.Ce que vous voulez, c'est remplacer un ou plusieurs espaces par un seul espace, afin que vous puissiez utiliser le motif
\s\s*
ou\s+
(recommandé)la source
\s
pas "onglet vertical"chr(11)
. Pour l'inclure également, vous devez utiliser laspace
classe de caractères:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.phpCette sorties
la source
\s
contient déjà des tabulations et de nouvelles lignes, donc cette expression régulière ci-dessus semble être suffisante.la source
/m
coutume de avoir un effet , car il n'y a pas^
ou les$
ancres et/u
n'aura aucun effet , sauf pour le ralentir légèrement et mourir si la chaîne d'entrée n'est pas valide UTF-8 (il ne touche pas ce qui\s
correspond, mais il toucherait\pZ
).simplifié à une fonction:
basé sur la réponse de Danuel O'Neal.
la source
la source
Je ne peux pas reproduire le problème ici:
Je ne sais pas si c'était juste une erreur de transcription ou non, mais dans votre exemple, vous utilisez une chaîne entre guillemets simples.
\n
et\t
ne sont traités comme des sauts de ligne et des tabulations que si vous avez une chaîne entre guillemets doubles. C'est:Edit : comme Codaddict l'a souligné,
\s\s+
ne remplacera pas un seul caractère de tabulation. Je ne pense toujours pas que l'utilisation\s+
soit une solution efficace, alors pourquoi pas à la place:la source
Cela remplace tous les tabulations, tous les sauts de ligne et toutes les combinaisons de plusieurs espaces, tabulations et sauts de ligne avec un seul espace.
la source
la source
Sans preg_replace ()
la source
J'utilise ce code et ce modèle:
Vous pouvez tester cela sur http://writecodeonline.com/php/
la source
SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260
Merci beaucoupIl vous suffit de l'exécuter comme suit:
la source
Voici ce que j'utiliserais:
une. Assurez-vous d'utiliser des guillemets doubles, par exemple:
b. Pour supprimer des espaces supplémentaires, utilisez:
Ce n'est peut-être pas la solution la plus rapide, mais je pense qu'elle nécessitera le moins de code, et cela devrait fonctionner. Je n'ai jamais utilisé mysql, donc je peux me tromper.
la source
En vérité, si vous pensez que vous voulez quelque chose comme ça:
la source
cela remplacera plusieurs onglets par un seul onglet
la source
Sans preg_replace, à l'aide de loop.
la source