PHP - comment créer un caractère de nouvelle ligne?


405

En PHP, j'essaie de créer un caractère de nouvelle ligne:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

Ensuite, j'ouvre le fichier créé dans le bloc-notes et il écrit littéralement la nouvelle ligne:

1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n

J'ai essayé de nombreuses variantes de la \r\n, mais aucune ne fonctionne. Pourquoi la nouvelle ligne ne se transforme-t-elle pas en nouvelle ligne?


Réponses:


639

Seules les chaînes entre guillemets doubles interprètent les séquences d'échappement \ret \ncomme '0x0D' et '0x0A' respectivement, donc vous voulez:

"\r\n"

Les chaînes entre guillemets simples , en revanche, ne connaissent que les séquences d'échappement \\et \'.

Donc, à moins que vous ne concaténiez la chaîne entre guillemets simples avec un saut de ligne généré ailleurs (par exemple, en utilisant une chaîne entre guillemets doubles "\r\n"ou en utilisant une chrfonction chr(0x0D).chr(0x0A) ), la seule autre façon d'avoir un saut de ligne dans une seule chaîne entre guillemets est de la saisir littéralement avec votre éditeur:

$s = 'some text before the line break
some text after';

Assurez-vous de vérifier les paramètres de saut de ligne de votre éditeur si vous avez besoin d'une séquence de caractères spécifique ( \r\npar exemple).


1
@Pacerier La seule façon d'avoir un retour chariot et de nouveaux caractères de ligne dans une seule chaîne entre guillemets est de saisir les caractères directement via le clavier (appuyez sur Entrée, selon les paramètres de votre éditeur sur les fins de ligne). Sinon, utilisez simplement la concaténation de chaînes.
Gumbo

1
@Gumbo: Vous dites que les chaînes entre guillemets simples, en revanche, ne connaissent que les séquences d'échappement \\ et \ '. Mais je viens d'imprimer une ligne avec echo comme <? Php echo 'Vous utilisez Internet Explorer. <br>'; echo 'Nouvelle ligne ajoutée'; ?> et vu la sortie dans le navigateur. Il a littéralement ajouté une nouvelle ligne entre deux chaînes que j'ai affichées. Cela signifie que le caractère <br> ou <br/> est développé en une seule chaîne entre guillemets. Existe-t-il d'autres caractères HTML en dehors de ces trois qui peuvent être compris par PHP à l'intérieur des chaînes entre guillemets simples? Je vous prie de bien vouloir mettre à jour votre réponse en conséquence. Merci.
PHPFan

1
@ user2839497 Ce que vous dites n'a aucun sens. Il n'y a pas de contexte de navigateur ici. Et bien sûr, le navigateur affiche une nouvelle ligne lorsque vous rencontrez un <br/>. Et bien sûr, rien ne vous empêche d'ajouter "<br/>" dans une seule chaîne entre guillemets. Mais cela ne rend pas une nouvelle ligne dans un simple fichier texte.
Escrimeur

1
@Pacerier Pour une politique de devis unique au lieu de couper la ligne dans l'éditeur comme Gumbo l'a suggéré dans son commentaire, vous pouvez utiliser l'autre solution dans la réponse Gumbos, par exemple: `` sortie d'une nouvelle ligne '' .chr (0x0A). '' Dans une seule chaîne entre guillemets '.
Escrimeur

2
Vous devriez utiliser à la PHP_EOLplace
kurdtpage

234

Utilisez la PHP_EOLconstante prédéfinie :

echo $clientid, ' ', $lastname, PHP_EOL;

La valeur constante sera définie en fonction des fins de ligne du système d'exploitation où PHP s'exécute. Sous Linux, ce sera "\n"; sous Windows, ça le sera "\r\n".


97

La commande "echo" en PHP envoie la sortie au navigateur en html brut, donc même si entre guillemets, le navigateur ne l'analysera pas en deux lignes car un caractère de nouvelle ligne en HTML ne veut rien dire. C'est pourquoi vous devez soit utiliser:

echo [output text]."<br>";

lorsque vous utilisez "echo", ou utilisez plutôt fwrite ...

fwrite([output text]."\n");

Cela produira une nouvelle ligne HTML à la place de "\ n".


4
Avec la façon dont la question est posée, il est probable qu'il envoie ces données vers une zone de texte ou javascript, etc. pour l'analyse ou la lecture de texte brut ne pas être rendu en HTML
PC3TJ


23

Les chaînes entre guillemets doubles ""interpolent, ce qui signifie qu'elles convertissent les caractères échappés en caractères imprimables.

Les chaînes entre guillemets simples ''sont littérales, ce qui signifie qu'elles sont traitées exactement comme les caractères sont saisis.

Vous pouvez avoir les deux sur la même ligne:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

les sorties:

$clientid $lastname
1 John Doe

Votre explication sur les différents types de notations de chaînes en PHP est correcte car elle montre l'erreur commise par l'auteur de la question. Mais votre exemple de code ne produira pas le résultat attendu car les variables sont utilisées dans une seule chaîne entre guillemets et, comme vous l'avez mentionné, elles ne seront pas interpolées!
Damien Flament

@Damien Flament, c'est ce que j'ai dit - le contenu entre guillemets simples n'est pas interpolé, mais le contenu entre guillemets doubles l'est. Mon exemple est peut-être déroutant car vous vous attendez à voir le contenu de $ clientid et $ lastname, plutôt que les littéraux "$ clientid" et "$ lastname". Je pense que c'était l'en-tête d'un tableau que j'ai utilisé lors du débogage. les lignes suivantes auraient étéecho "$clientid $lastname\r\n"
Kevin S. Miller

Lorsque j'écris "le résultat attendu", je parle du résultat que l'auteur de la question attendait dans sa question. L'ajout du code affiché sur votre commentaire à votre réponse et l'affichage du résultat peuvent améliorer la qualité de votre réponse.
Damien Flament


13

\r\nEst en fait pour le côté html de la sortie. Avec ces caractères, vous pouvez simplement créer une nouvelle ligne dans le code html pour le rendre plus lisible:

echo "<html>First line \r\n Second line</html>";

affichera:

<html>First line
Second line</html>

que la visualisation de la page sera:

First line Second line

Si vous vouliez vraiment dire cela, il vous suffit de corriger le guillemet simple avec le guillemet "":

echo "\r\n";

Sinon, si vous voulez diviser le texte, dans notre exemple «Première ligne» et «Deuxième ligne», vous devez utiliser le code html <br />::

First line<br />Second line

qui produira:

First line
Second line

De plus, il serait plus lisible si vous remplacez le script entier par:

echo "$clientid $lastname \r\n";

1
Non, ça ne devrait pas. Parce que c'est généralement faux. Le premier bloc de code sera rendu sous la forme First line Second line- tout espace, y compris les sauts de ligne, sera compressé en un seul caractère d'espace dans la sortie rendue. En outre, </br>est tout sauf HTML valide.
D_4_ni

1
Gardez également à l'esprit que si vous envoyez des e-mails texte avec votre script php, vous aurez toujours besoin de ces fins de ligne au lieu de pauses (<br>)
KennyV

9

w3school a proposé de cette façon:

echo nl2br("One line.\n Another line.");

en utilisant cette fonction, vous pouvez le faire .. j'ai essayé d'autres moyens qui ont dit ci-dessus mais ils ne m'aideront pas ..


La question n'est pas de rompre une ligne dans un paragraphe en HTML. Il s'agit du caractère de nouvelle ligne !
Damien Flament

Pour le contexte, la nl2br()fonction convertit les caractères de nouvelle ligne en <br />balise HTML. Cela peut être utile pour créer une nouvelle ligne sur les pages du navigateur, mais pas une nouvelle ligne dans les fichiers texte ou JavaScript, ou pour imprimer sur l'écran ou la console.
SherylHohman

4

Pour une raison quelconque, chaque publication posant des questions sur les échappements de nouvelle ligne en PHP ne mentionne pas le cas où le simple fait d'insérer une nouvelle ligne dans des chaînes entre guillemets fera exactement ce que vous pensez:

ex 1.

 echo 'foo\nbar';

L'exemple 1 n'imprime clairement pas le résultat souhaité, cependant, bien qu'il soit vrai que vous ne pouvez pas échapper une nouvelle ligne entre guillemets simples, vous pouvez en avoir un:

ex 2.

 echo 'foo
 bar';

L'exemple 2 a exactement le comportement souhaité. Malheureusement, la nouvelle ligne insérée dépend du système d'exploitation. Ce n'est généralement pas un problème, car les navigateurs / serveurs Web interpréteront correctement la nouvelle ligne, qu'elle soit \ r, \ r \ n ou \ n.

De toute évidence, cette solution n'est pas idéale si vous envisagez de distribuer le fichier par d'autres moyens qu'un navigateur Web et plusieurs systèmes d'exploitation. Dans ce cas, vous devriez voir l'une des autres réponses.

Remarque: en utilisant un éditeur de texte riche en fonctionnalités, vous devriez pouvoir insérer une nouvelle ligne en tant que caractère (s) binaire (s) qui représente une nouvelle ligne sur un système d'exploitation différent de celui qui modifie le fichier. Si tout le reste échoue, il suffit d'utiliser un éditeur hexadécimal pour insérer le caractère ascii binaire.


3

Utilisez le PHP nl2br pour obtenir les sauts de ligne dans une chaîne de texte.

$ text = "Manu est un bon garçon. (Entrée) Il sait bien coder.

echo nl2br ($ text);

Résultat.

Manu est un bon garçon.

Il sait bien coder.


1
La nl2brfonction convertit les caractères de nouvelle ligne en <br />balise HTML. Si la chaîne ne contient aucun caractère de nouvelle ligne, cette fonction ne fera rien! De plus, la question n'est pas de casser une ligne dans un paragraphe en HTML. Il s'agit du caractère de nouvelle ligne !
Damien Flament

2

J'ai également essayé cette combinaison dans les guillemets simples et doubles. Mais aucun n'a fonctionné. Au lieu d'utiliser une \nmeilleure utilisation <br/>dans les guillemets doubles. Comme ça..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

La question n'est pas de rompre une ligne dans un paragraphe en HTML. Il s'agit du caractère de nouvelle ligne !
Damien Flament

2

Utilisez chr (13) pour le retour chariot et chr (10) pour la nouvelle ligne

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);

2

Pour toute déclaration d'écho, j'utilise toujours <br>des guillemets doubles.


2
La question n'est pas de rompre une ligne dans un paragraphe en HTML. Il s'agit du caractère de nouvelle ligne !
Damien Flament

1

Rien ne fonctionnait pour moi.

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

Travaille pour moi:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";

0

You Can Try This.
<?php
   $content = str_replace(PHP_EOL, "<br>", $your_content);
 ?>
 
<p><?php echo($content); ?></p>

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.