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.