194 votes

Comment supprimer les sauts de ligne (aucun caractère !) de la chaîne de caractères ?

J'ai cherché à la fois sur SO et sur le reste du web une réponse à mon problème et j'ai fini par trouver les mêmes "solutions" insuffisantes, encore et encore. Quoi qu'il en soit, voici ce qu'il en est :

Je sauvegarde les données saisies par l'utilisateur dans une zone de texte dans une base de données MySQL (dans un environnement WordPress, mais cela ne devrait pas avoir d'importance pour ce problème, je crois). Le texte est ensuite récupéré dans la base de données pour être affiché aux administrateurs dans le backend du site. Le problème survient lorsque les utilisateurs soumettent du texte avec des sauts de ligne (c'est-à-dire lorsqu'ils appuient sur la touche Entrée).

Un exemple de chaîne pourrait ressembler à ceci :

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

Il n'y a pas de caractères de fin de ligne (" \n ", " \r ", ou autre) dans la chaîne.

J'utilise nl2br() pour générer une sortie HTML, mais ce n'est pas suffisant. Le résultat est donc le suivant :

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

Ce qui, d'après ce que j'ai compris, correspond à ce que l'on attend de nous. nl2br() car il insère les balises et n'est pas censé remplacer les sauts de ligne en premier lieu ?

Cependant, le format dont j'ai besoin est le suivant :

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

Si la chaîne contient des caractères EOL tels que " \n "Dans ce cas, j'utiliserais l'un ou l'autre des moyens suivants str_replace() ou preg_replace() et d'en finir, mais je n'ai aucune idée de l'aiguille à utiliser pour alimenter l'une ou l'autre de ces fonctions s'il n'y a pas de caractères à l'origine.

Je peux accéder manuellement au champ concerné dans la base de données, appuyer sur la touche Espace arrière à chaque saut de ligne et ce que je veux faire plus tard avec la chaîne de caractères fonctionne. Je sais donc que j'ai besoin du format ci-dessus.

10voto

Ajjaah Points 1

Pour qu'il fonctionne correctement sous Windows, je suggère d'utiliser

$buffer = str_replace(["\r\n", "\r", "\n"], "", $buffer);

"\r\n" - pour Windows, "\r" - pour Mac et "\n" - pour Linux

10voto

Rafanake Points 159

Str_replace(PHP_EOL, null, $str) ;

8voto

Gijs de Jong Points 438

Vous pouvez également utiliser Garniture PHP

Cette fonction renvoie une chaîne de caractères dont les espaces blancs ont été supprimés au début et à la fin de la chaîne. Sans le second paramètre, trim() supprimera ces caractères :

  • " "(ASCII 32 (0x20)), un espace ordinaire.
  • " \t "(ASCII 9 (0x09)), une tabulation.
  • " \n "(ASCII 10 (0x0A)), une nouvelle ligne (saut de ligne).
  • " \r "(ASCII 13 (0x0D)), un retour chariot.
  • " \0 "(ASCII 0 (0x00)), l'octet NUL.
  • " \x0B "(ASCII 11 (0x0B)), une tabulation verticale.

2voto

Shubham Dange Points 32

Je pense que ma réponse est trop tardive mais j'ai eu le même problème de ligne supplémentaire en l'utilisant dans JS script, mais cela fonctionne comme ceci

Cela ajoutera <br /> et les sauts de ligne dans la chaîne.

$text = nl2br($text);

Cette ligne supprimera la ligne supplémentaire.

$text = preg_replace("/\r|\n/", "", $text);

Remplacement <br /> avec n'importe quel symbole commun indésirable comme cet astérisque ** lors de l'insertion dans la base de données :

$text = str_replace("<br />","**",$text );

Et quand je veux l'utiliser dans un programme, je l'utilise en remplacement. ** .

$text = str_replace("**","\\n",$text );

Ensuite, utilisez $text dans le programme

1voto

PYK Points 1225

J'utilise 3 lignes pour faire ce travail, alors pensez à $s comme vos "affaires"...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);
  • Légende :

chr(10) ___a saut de ligne

chr(13) ___le retour

\r\n ______a nouvelle ligne

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