web-dev-qa-db-fra.com

\ n vs PHP_EOL contre <br>?

Dans la plupart des cas, comme pour un site Web interactif, lorsque nous publions plusieurs lignes de contenu dans le navigateur du client Web, à mon avis, <BR /> est bien préférable aux deux autres: \n ou PHP_EOL.

Sinon, nous devons utiliser "<pre></pre>" pour envelopper le contenu de sortie ou utiliser nl2br() pour insérer <BR /> avant \n afin que la marque de ligne multiple puisse prendre effet en HTML. Comme exemple suivant.

$fruits = array('a'=>'Apple', 'b'=>'banana', 'c'=>'cranberry');

// Multiple lines by \n
foreach( $fruits as $key => $value ){
    echo "$key => $value \n" ;
}

// Multiple lines by PHP_EOL
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
    echo ("$key => $value" . PHP_EOL);
}

// Multiple lines by <BR />
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
    echo ("$key => $value <BR />");
}

Certaines personnes pensent que PHP_EOL est utile lors de l'écriture de données dans un fichier, par exemple un fichier journal. Il créera des sauts de ligne quelle que soit votre plate-forme.

Ensuite, ma question est quand on utilise \n? Quelle est la différence entre \n et PHP_EOL et <BR />? Est-ce que n'importe qui pourrait avoir une grande liste de chacun de leurs avantages et inconvénients?

26
John Yin

DOS, Unix et Mac (antérieurs à OS X et OS X) utilisent tous des caractères ou des combinaisons de caractères différents pour représenter "passer à la ligne suivante".

  • DOS - Utilise un CR + LF (c'est-à-dire ASCII 13 suivi d'un ASCII 10 ou \r\n) pour représenter une nouvelle ligne.

  • Unix - Utilise un LF (c'est-à-dire ASCII 10 ou \n) pour représenter une nouvelle ligne.

  • Mac (pré-OS X) - Utilise un CR (c'est-à-dire ASCII 13 ou \r) pour représenter une nouvelle ligne.

  • Mac (OS X) - Comme Unix, utilise un LF pour représenter une nouvelle ligne.

Par conséquent, le moment d'utilisation de chacun dépend de ce que vous recherchez. Si vous écrivez pour une plate-forme spécifique sans intention de portabilité, utilisez le caractère ou la combinaison de caractères pour séparer les lignes importantes pour cette plate-forme. PHP_EOL a pour but de choisir automatiquement le caractère correct pour la plate-forme, afin que vos nouvelles lignes soient indépendantes de la plate-forme.

Tous ces éléments apparaissent sous la forme d'un seul espace dans un navigateur, car les navigateurs réduisent les espaces en un seul espace d'affichage (sauf si vous utilisez <pre> comme vous l'avez mentionné ou un CSS qui modifie le comportement des espaces). C'est ici que <br> entre, comme vous l'avez mentionné, qui convertira ces \n nouvelles lignes en <br> afin qu'elles fournissent des sauts de ligne en affichage HTML.

30
Nick Coons

<br>

<br> ne doit être utilisé que pour diviser du texte. Vous pouvez voir que cela est utilisé pour espacer des éléments dans un document HTML, mais ce n’est pas son but, car l’espacement de la disposition doit être obtenu avec CSS tel que margin. Voici un cas d'utilisation décent:

<p>This <br> is <br> some <br> text.</p>

Je divise généralement mon texte avec des sauts de ligne pour des raisons de lisibilité. Je ne voudrais donc pas que les sauts de ligne soient affichés dans le document. Cela étant, la balise <br> est nécessaire.

Espaces CSS, <pre>

L'élément html <pre> est un élément qui, par défaut, utilise la règle CSS white-space: pre; pour que les espaces du document soient affichés dans cet élément. Normalement, un seul espace serait rendu quelle que soit la quantité d'espaces dans le document. Un très bon usage de ce style est pour les blocs de code. Si j'écris un bloc de code, je l'espère naturellement comme je le souhaite et je ne tiens pas particulièrement à envelopper une balise <p> autour de chaque ligne (ce n'est pas sémantique de toute façon) et je ne veux pas non plus ajouter à mon code <br>. Pire encore, il y a l'indentation du code! whitespace: pre fait beaucoup de sens ici.

<pre>
function foo() {
  //etc
}
</pre>

\ r,\n, PHP_EOL

Selon la plate-forme à partir de laquelle votre code php est exécuté, vous devrez restituer un saut de ligne avec \r, \n\ ou les deux \r\n. PHP_EOL choisira automatiquement pour vous, il s'agit donc de l'approche la plus dynamique.

7
m59

Comparer un saut de ligne HTML <br> avec des sauts de ligne de texte n'a aucun sens. <br> est seulement une page dans le rendu du navigateur d'un site Web par le navigateur, alors que \n et PHP_EOL sont des sauts de ligne réels, en code source.

Comme vous le dites vous-même, PHP_EOL fonctionnera quelle que soit la plate-forme et est donc également préférable à \n. Initialement, \n était uniquement le saut de ligne standard sous UNIX, alors que Macintosh utilisait \r et Windows/DOS utilisait une combinaison des deux: \r\n. Lorsque vous utilisez PHP_EOL, cependant, vous n'avez pas à vous soucier de la plate-forme.

De nos jours, la plupart des systèmes et des éditeurs sont suffisamment tolérants pour accepter le saut de ligne que vous décidez d'utiliser, mais l'utilisation du correct / est évidemment préférable et plus facilement réalisée avec PHP_EOL, il n'y a donc aucune raison de ne pas l'utiliser.

5
kba

Je dois exécuter des scripts sur cron et enregistrer les résultats dans un fichier journal. Mais parfois, je lance le script sur mon navigateur. Je fais donc le test suivant pour utiliser le bon caractère de fin de ligne:

<?php
$eol = (isset($_SERVER['Shell'])) ? PHP_EOL : "<br />";
echo "DISCOVER". $eol;
?>
2
Flavio

<br>

Il a été créé pour la conception HTML ... <br> ne fonctionnera pas dans de nombreux endroits tant qu'il ne supportera pas le type de contenu est <HTML>

un exemple1 dans les fonctions de messagerie dont le type de contenu est textuel ... <br> ne fonctionnera pas mais /n fonctionnera.

plus d'exemples où vous verrez des résultats différents.

exemple 2

<html>
<body>
<script>
document.write("Hello \n World!");
</script>
 </body>
</html>

En tant que document.write écrit dans le DOM, vous devez utiliser 
pour une nouvelle ligne . Documents MDN pertinents

exemple3

txt = "Hello \n World!" ; 
alert(txt);

parce que la fonction alert demande l'affichage d'un message à l'utilisateurit n'est pas la même chose qu'une fenêtre contextuelle contenant du code HTML

/n

est fondamentalement commun dans la plupart des langages de programmation pour un saut de ligne et cela fonctionnera dans la plupart des plates-formes. \n et PHP_EOL sont des sauts de ligne du code source.

La constante PHP_EOL doit généralement être utilisée pour une sortie spécifique à la plate-forme.

Principalement pour la sortie de fichier réellement . En fait, les fonctions de fichier transforment déjà \n ←→ \r\n sur les systèmes Windows à moins d'être utilisé en mode binaire fopen(…, "wb") . Pour l'entrée de fichier, vous devriez cependant préférer \n. Alors que la plupart des protocoles réseau (HTTP) sont supposés utiliser \r\n,, cela n’est pas garanti.

Par conséquent, il est préférable de rompre avec \n et de supprimer manuellement tout \r facultatif:

exemple

$lines = array_map("rtrim", explode("\n", $content));

Une alternative plus robuste et plus tentante utilise preg_split () et une expression rationnelle:

$lines = preg_split("/\R/", $content);

L'espace réservé \R détecte toute combinaison de \r + \n. Donc, serait plus sûr, et même de travailler pour les fichiers texte Classic MacOS ≤ 9 (rarement vu dans la pratique).

Attention, les anciens Mac utilisent\r, ce serait une meilleure solution: preg_replace('~\r\n?~', "\n", $str);

PHP_EOL

doit être utilisé lors de l’écriture d’une sortie telle que les fichiers journaux.

Il produira le saut de ligne spécifique à votre plate-forme.

c'est une constante qui maintient le ou les caractères de saut de ligne utilisés par la plate-forme du serveur. Dans le cas de Windows, il s'agit de\r\n. Sur * nix, c'est\n. Vous avez apparemment un serveur Windows.

0
Sayed Mohd Ali

Vous pouvez créer une fonction avec le code de Flavio, qui définit toujours la bonne ligne, que vous l'exécutiez sur le shell ou dans le navigateur:

<?php
function nl($string) {
  if(isset($_SERVER['Shell'])) return preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
  return nl2br($string);
}


print nl("One\nTwo<br>Three\r\nFour<br />Five
Six" . PHP_EOL);
?>
0
Peter