Cela peut sembler une dupe, mais soyez assurés que ce n'est pas le cas - j'ai cherché à la fois SO ainsi que le reste du Web pour 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, voilà:
J'enregistre les entrées utilisateur d'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). Il est ensuite récupéré de la base de données pour être montré aux administrateurs dans le backend du site. Le problème se produit lorsque les utilisateurs soumettent du texte avec des sauts de ligne (c'est-à-dire appuyez sur la touche Entrée).
Un exemple de chaîne peut 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()
dessus pour générer une sortie HTML, mais ce n'est pas suffisant. Le résultat est alors:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
Quel est, pour autant que je sache, le nl2br()
résultat attendu , car cela insère les balises et n'est pas censé remplacer les sauts de ligne en premier lieu?
Cependant, le format dont j'ai besoin serait 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 contenait des caractères EOL tels que "\ n", je la frapperais avec str_replace()
ou preg_replace()
et en finirais avec, mais je n'ai aucune idée de l'aiguille pour alimenter l'une de ces fonctions s'il n'y a pas de caractères là en premier lieu.
Je peux accéder manuellement au champ pertinent dans la base de données, appuyez sur Retour arrière pour chaque saut de ligne et ce que je veux faire plus tard avec la chaîne fonctionne. Je sais donc que j'ai besoin du format ci-dessus.
Réponses:
Vous devriez pouvoir le remplacer par un preg qui supprime toutes les nouvelles lignes et les retours chariot. Le code est:
Même si les
\n
caractères n'apparaissent pas, si vous obtenez des retours chariot, il y a un caractère invisible. Le remplacement des preg devrait les saisir et les réparer.la source
/\r|\n|\r\n/
La solution de Ben est acceptable, mais str_replace () est de loin plus rapide que preg_replace ()
En utilisant moins de puissance CPU, réduit les émissions mondiales de dioxyde de carbone
la source
la source
C'est parce
nl2br()
que ne supprime pas du tout les nouvelles lignes.Utilisez à la
str_replace
place:la source
Vous pouvez également utiliser PHP Trim
la source
Pour fonctionner correctement également sur Windows, je suggère d'utiliser
"\r\n"
- pour Windows,"\r"
- pour Mac et"\n"
- pour Linuxla source
\r
et\n
sont supprimés dans la chaîne, pourquoi ne serait-ce pas le cas pour ceux qui se succèdent directement?\r\n
sous Windows et ça n'a pas fonctionné sous Linux.\r\n
FIRST aiderait, car cela signifie une virgule plutôt que deux pour chaque partie si ce saut de ligne\r\n
abord, puis nous remplaçons\r
et\n
, j'ai édité ma réponse.\r
et\r
, il n'est pas nécessaire de supprimer\r\n
, vous pouvez l'utilisateurstr_replace(array("\r","\n"), "", $buffer);
pour obtenir le même résultat.str_replace (PHP_EOL, null, $ str);
la source
Quelque chose d'un peu plus fonctionnel (facile à utiliser n'importe où):
Utiliser PHP_EOL comme paramètre de remplacement de recherche est également une bonne idée! Gloire.
la source
Alternative intégrée: trim ()
Il est là pour supprimer les sauts de ligne de différents types de fichiers texte, mais ne gère pas le HTML.
la source
J'utilise 3 lignes pour faire ce travail, alors considérez $ s comme votre "truc" ...
la source