n vs. PHP EOL vs.?

Dans la plupart des cas, comme pour un site Web interactif, lorsque nous sortons plusieurs lignes de contenu dans le navigateur du client web, à mon avis, <BR /> est beaucoup plus préférable que les 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 croient PHP_EOL est utile lors de l'écriture de données dans un fichier, par exemple un fichier journal. Il va créer des sauts de ligne, Peu importe quelle que soit votre plate-forme.

Alors, ma question est quand nous utilisons n? Quelle est la différence entre n et PHP_EOL, et <BR />? N'importe quel corps pourrait-il avoir une grande liste de chacun de leurs avantages et inconvénients?

26
demandé sur John Yin 2014-01-27 09:15:34

5 réponses

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

  • DOS-utilise un CR + LF (C'est 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, quand utiliser chacun dépend de ce que vous allez chercher. Si vous écrivez pour une plate-forme spécifique sans l'intention de la portabilité, utilisez le caractère ou la combinaison de caractères pour briser les lignes qui comptent pour cette plate-forme. Le but de PHP_EOL est de choisir automatiquement le caractère correct pour la plate-forme, de sorte que vos nouvelles lignes soient indépendantes de la plate-forme.

Tous ces éléments apparaissent comme un seul espace dans un navigateur comme les navigateurs réduisent les espaces dans un espace d'affichage à des fins d'affichage (sauf si vous utilisez <pre> comme vous l'avez mentionné, ou CSS qui modifie le comportement des espaces). C'est là que <br> entre, comme vous l'avez mentionné, qui convertira ces {[1] } nouveaux caractères de ligne en <br> afin qu'ils fournissent des sauts de ligne dans L'affichage HTML.

29
répondu Nick Coons 2014-01-27 05:27:05

<br> ne doit être utilisé lors de la division du texte. Vous pouvez voir cela utilisé pour espacer les éléments dans un document html, mais ce n'est pas son but, car l'espacement de mise en page doit être réalisé avec CSS tel que margin. Voici un cas d'utilisation décent:

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

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

Espace CSS,

Le l'élément html <pre> est un élément qui, par défaut, utilise la règle CSS white-space: pre; afin que les espaces du document soient rendus dans cet élément. Normalement, un seul espace serait rendu indépendamment de 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'espacerai naturellement comme je l'ai l'intention et je ne me soucie pas particulièrement d'envelopper une balise <p> autour de chaque ligne (ce n'est pas sémantique de toute façon) et je ne veux pas jeter mon code avec <br> soit. 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

En fonction de la plate-forme à partir de laquelle votre code php fonctionne, vous devrez rendre un saut de ligne avec \r, \n\, ou les deux \r\n. {[13] } choisira automatiquement pour vous, c'est donc l'approche la plus dynamique.

7
répondu m59 2014-01-27 05:41:56

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

Comme vous le mentionnez vous-même, PHP_EOL fonctionnera indépendamment de la plate-forme et est donc également préféré sur \n. Initialement, \n n'était que le saut de ligne standard sur 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 du tout.

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

5
répondu kba 2014-01-27 05:26:20

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. Donc, je fais le test suivant afin d'utiliser la fin de ligne correcte char:

<?php
$eol = (isset($_SERVER['SHELL'])) ? PHP_EOL : "<br />";
echo "DISCOVER". $eol;
?>
2
répondu Flavio 2017-10-02 13:10:58

Vous pouvez créer une fonction avec le code de Flavio, qui définit toujours le retour à la ligne correct, peu importe si vous l'exécutez 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
répondu Peter 2017-11-07 15:45:35