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.

575voto

Fox Points 471

La solution de Ben est acceptable, mais str_replace() est de loin plus rapide que preg_replace()

$buffer = str_replace(array("\r", "\n"), '', $buffer);

En utilisant moins d'énergie CPU, on réduit les émissions de dioxyde de carbone dans le monde.

436voto

Ben Roux Points 2211

Vous devriez pouvoir le remplacer par un preg qui supprime toutes les nouvelles lignes et les retours à la ligne. Le code est le suivant :

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

Même si la \n n'apparaissent pas, si vous obtenez des retours de chariot, c'est qu'il y a un caractère invisible. Le preg replace devrait les récupérer et les corriger.

19voto

bsdnoobz Points 8147
$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line

15voto

kenorb Points 2464

C'est parce que nl2br() ne supprime pas du tout les nouvelles lignes.

Renvoie une chaîne de caractères avec <br /> ou <br> inséré avant toutes les nouvelles lignes ( \r\n , \n\r , \n y \r ).

Utilisation str_replace au lieu de cela :

$string = str_replace(["\r\n", "\r", "\n"], "<br />", $string);

12voto

tfont Points 1020

Quelque chose d'un peu plus fonctionnel (facile à utiliser partout) :

function strip_carriage_returns($string)
{
    return str_replace(["\n\r", "\n", "\r"], '', $string);
}

Utilisation PHP_EOL comme paramètre de remplacement de la recherche est également une bonne idée ! Merci beaucoup.

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