Comment remplacer r & n Avec?

Essayer de simplement remplacer quelques nouvelles lignes. J'ai essayé 3 façons différentes et je n'obtiens aucun changement:

$description = preg_replace('/r?n|r/','<br/>', $description);
$description = str_replace(array("rn","r","n"),"<br/>", $description);
$description = nl2br($description);

Ceux-ci devraient tous fonctionner mais j'ai toujours les nouvelles lignes. Ils sont doubles: "rr". Cela ne devrait pas faire échouer l'un de ces droits?

53
demandé sur kenorb 2011-05-10 10:34:54

8 réponses

Il y a déjà nl2br() fonction que remplace inserts <br> balises avant les nouveaux caractères de ligne:

Exemple (codepad):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

, Mais si elle ne fonctionne toujours pas assurez-vous que le texte $desciption est entre guillemets.

C'est parce que les guillemets simples ne "développent" pas les séquences d'échappement telles que \n comparant aux chaînes entre guillemets doubles. Citation de la documentation PHP:

Note : Contrairement aux guillemets double et heredoc les syntaxes, les variables et les séquences d'échappement des caractères spéciaux ne seront pas développées lorsqu'elles apparaissent dans des chaînes entre guillemets simples.

99
répondu Robik 2015-03-03 00:14:22

Essayez d'utiliser ceci

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description);
52
répondu afarazit 2013-11-06 19:10:07

Vous pouvez avoir de vrais caractères " \ " dans la chaîne (les chaînes de guillemets simples, comme dit @Robik).

Si vous êtes sûr que les chaînes' \r 'ou' \n 'doivent également être remplacées, Je ne parle pas de caractères spéciaux ici mais d'une séquence de deux caractères' \ ' et 'r' , puis échappez le ' \ ' dans la chaîne de remplacement et cela fonctionnera:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);
14
répondu regilero 2011-05-10 07:12:03

nl2br() comme vous l'avez cela devrait fonctionner correctement:

$description = nl2br($description);

Il est plus probable que le ' non fermé sur la première ligne de votre exemple de code Cause votre problème. Supprimer le ' après $ description ...

...$description');
5
répondu sakatc 2011-05-10 06:49:43

Cela fonctionnera à coup sûr:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
2
répondu Radeck 2012-09-22 10:14:28

Nl2br () a fonctionné pour moi, mais j'avais besoin d'envelopper la variable avec des guillemets doubles:

Cela fonctionne:

$description = nl2br("$description");

Cela ne fonctionne pas:

$description = nl2br($description);
2
répondu infografnet 2015-10-28 23:36:26

Essayez ceci:

echo str_replace( array('\r\n','\n\r','\n','\r'), '<br>' , $description );
1
répondu l2aelba 2017-03-07 13:28:10

Si vous utilisez nl2br toutes les occurrences de \n et \r sera remplacé par <br>. Mais si (je ne sais pas comment c'est), vous obtenez toujours de nouvelles lignes, vous pouvez utiliser

str_replace("\r","",$description);
str_replace("\n","",$description);

Pour rejouer les nouvelles lignes inutiles par une chaîne vide

-2
répondu Evgeniy Skulditsky 2011-05-10 06:57:20