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?

davidjhp
la source
1
doublon possible de Print newline en PHP entre guillemets simples
Gordon

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).

Gombo
la source
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".

nnevala
la source
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".

davea0511
la source
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
43

Utilisez la constante PHP_EOL pour obtenir le bon caractère, peu importe la plate-forme.

http://us3.php.net/manual/en/reserved.constants.php

Un exemple d'utilisation simple:

<?php
$data = 'First line' . PHP_EOL .
        'Second line' . PHP_EOL .
        'Third line';

file_put_contents("filename.txt", $data);
?>
Salvi Pascual
la source
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
Kevin S. Miller
la source
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
15

Vous devez utiliser ceci:

"\n"

Vous pourriez également vouloir jeter un œil à PHP EOL .

Wouter Dorgelo
la source
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";
Chaussure
la source
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 ..

amin gholami
la source
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.

user2574384
la source
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.

Manu RS
la source
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";
phphunger
la source
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);
Ariful Islam Rajib
la source
2

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

Matthew Park
la source
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";
Motahar Hossain
la source
0

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

Tariqul_Islam
la source