web-dev-qa-db-fra.com

PHP Sauts de ligne d'écho

Quelle est la différence entre\n et\r (je sais que cela a quelque chose à voir avec le système d'exploitation), et quelle est la meilleure façon de faire écho à un saut de ligne qui fonctionnera sur plusieurs plateformes?

EDIT: En réponse à Jarod, je vais utiliser ths pour faire écho à un saut de ligne dans un fichier journal .txt, bien que je sois sûr de l'utiliser à l'avenir pour des choses telles que faire écho au makup HTML sur une page.

42
PHLAK
  • \n est un saut de ligne Linux/Unix.
  • \r est un saut de ligne classique de Mac OS (non OS X). Mac OS X utilise l'unix ci-dessus \n.
  • \r\n est un saut de ligne Windows.

J'utilise généralement \n sur nos systèmes Linux et la plupart des applications Windows le font de toute façon.

45
Jarod Elliott

Utilisez le PHP_EOL constant, qui est automatiquement défini sur le saut de ligne correct pour le système d'exploitation sur lequel le script PHP est exécuté).

Notez que cette constante est déclarée depuis PHP 5.0.2.

<?php
    echo "Line 1" . PHP_EOL . "Line 2";
?>

Pour une compatibilité ascendante:

if (!defined('PHP_EOL')) {
    switch (strtoupper(substr(PHP_OS, 0, 3))) {
        // Windows
        case 'WIN':
            define('PHP_EOL', "\r\n");
            break;

        // Mac
        case 'DAR':
            define('PHP_EOL', "\r");
            break;

        // Unix
        default:
            define('PHP_EOL', "\n");
    }
}
123
Andrew Moore

La réponse de Jarod contient l'utilisation correcte de\r\n sur divers OS. Voici un peu d'histoire:

  • \ r, ou le caractère ASCII avec le code décimal 13, est nommé CR après "retour chariot".
  • \ n, ou le caractère ASCII avec le code décimal 10, est nommé "nouvelle ligne" ou LF après "saut de ligne").

La terminologie "retour chariot" et "saut de ligne" remonte à l'époque où les télétypes étaient utilisés à la place des terminaux avec moniteur et clavier. En ce qui concerne les télétypes ou les machines à écrire, le "retour chariot" signifie déplacer le curseur et revenir à la première colonne de texte, tandis que le "saut de ligne" signifie faire tourner le rouleau pour accéder à la ligne suivante. À cette époque, la distinction avait un sens. Aujourd'hui, les combinaisons\n,\r,\r\n pour représenter la fin d'une ligne de texte sont complètement arbitraires.

31

Aucune compatibilité ascendante nécessaire pour PHP_EOL sur PHP4.

Besoin de corriger la déclaration de Moore sur la disponibilité constante de PHP_EOL: "... est déclaré depuis PHP 5.0.2.".

Non, il existe depuis PHP 4.3.10. Quiconque exécute encore quelque chose de moins que cela ne devrait de toute façon pas être dans le biz. À ce jour, personne ne devrait utiliser quelque chose de moins que PHP 5!

Dans le manuel PHP: "PHP_EOL Le symbole 'End Of Line' correct pour cette plate-forme. Disponible depuis PHP 4.3.10 et PHP 5.0 .2 ".

7
Chris Kunze