Cela peut sembler être une dupe, mais rassurez-vous, ce n’est pas le cas: j’ai cherché à la fois SO et sur le reste du Web à la recherche d’une réponse à mon problème et ai fini par trouver les mêmes "solutions insuffisantes" " encore et encore. Quoi qu'il en soit, la voici:
Je sauvegarde 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 présenté aux administrateurs dans le backend du site. Le problème se produit lorsque les utilisateurs envoient du texte avec des sauts de ligne (c'est-à-dire appuyez 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 similaires) dans la chaîne.
J'utilise nl2br()
pour générer une sortie HTML, mais cela ne suffit pas. 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
D'après ce que je comprends, quel est le résultat attendu nl2br()
, 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 l'utilisais avec str_replace()
ou preg_replace()
pour en finir, mais je n'ai aucune idée de l'aiguille à alimenter ces fonctions s’il n’ya pas de personnages en premier lieu.
Je peux accéder manuellement au champ correspondant dans la base de données, appuyer sur Backspace pour chaque saut de ligne et ce que je veux faire plus tard avec la chaîne fonctionne. Donc, je sais que j'ai besoin du format ci-dessus.
Vous devriez pouvoir le remplacer par un preg qui supprime tous les retours à la ligne et les retours à la ligne. Le code est:
preg_replace( "/\r|\n/", "", $yourString );
Même si les caractères \n
n'apparaissent pas, si vous obtenez des retours chariot, il y a un caractère invisible. Le remplacement de prégare devrait attraper et réparer ceux-ci.
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 de puissance de calcul, les émissions mondiales de dioxyde de carbone sont réduites.
$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
C'est parce que nl2br()
ne supprime aucune nouvelle ligne.
Renvoie une chaîne avec
<br />
ou<br>
inséré avant tous les retours à la ligne (\r\n
,\n\r
,\n
et\r
).
Utilisez str_replace
à la place:
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
Vous pouvez également utiliser PHP trim
Cette fonction retourne une chaîne avec des espaces supprimés du début et de la fin de str. Sans le second paramètre, trim () supprimera ces caractères:
- "" (ASCII 32 (0x20)), un espace ordinaire.
- "\ t" (ASCII 9 (0x09)), un onglet.
- "\ n" (ASCII 10 (0x0A)), nouvelle ligne (saut de ligne).
- "\ r" (ASCII 13 (0x0D)), un retour à la ligne.
- "\ 0" (ASCII 0 (0x00)), l'octet NUL.
- "\ x0B" (ASCII 11 (0x0B)), un onglet vertical.
str_replace (PHP_EOL, null, $ str);
Pour fonctionner correctement aussi sur Windows, je suggérerais d'utiliser
$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);
"\r\n"
- pour Windows, "\r"
- pour Mac et "\n"
- pour Linux
Quelque chose d'un peu plus fonctionnel (facile à utiliser n'importe où):
function strip_carriage_returns($string)
{
return str_replace(array("\n\r", "\n", "\r"), '', $string);
}
Utiliser PHP_EOL comme paramètre de remplacement de la recherche est également une bonne idée! Gloire.