30 votos

Rupturas de línea PHP Echo

¿Cuál es la diferencia entre \n y \r (Sé que tiene algo que ver con el sistema operativo), y ¿cuál es la mejor manera de hacer eco de un salto de línea que funcione en todas las plataformas?

EDITAR: En respuesta a Jarod, usaré esto para hacer eco de un salto de línea en un archivo de registro .txt, aunque estoy seguro de que lo usaré en el futuro para cosas como hacer eco de la composición HTML en una página.

92voto

Andrew Moore Puntos 49765

Utilice el PHP_EOL que se ajusta automáticamente al salto de línea correcto para el sistema operativo en el que se ejecuta el script PHP.

Tenga en cuenta que esta constante se declara desde PHP 5.0.2.

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

Para la compatibilidad con el pasado:

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");
    }
}

32voto

Jarod Elliott Puntos 7124

\n es un salto de línea linux/unix

\r es un salto de línea clásico de mac [OS X utiliza el anterior de unix \n ]

\r\n es un salto de línea de Windows

Por lo general, sólo uso \n en nuestros sistemas linux y la mayoría de las aplicaciones de Windows lo manejan bien de todos modos

27voto

Federico A. Ramponi Puntos 23106

La respuesta de Jarod contiene el uso correcto de \r \n en varios sistemas operativos. Aquí hay algo de historia:

  • \r , o el carácter ASCII con código decimal 13, se denomina CR por "retorno de carro".
  • \n , o el carácter ASCII con código decimal 10, se denomina "newline", o LF tras "line feed".

La terminología "retorno de carro" y "avance de línea" se remonta a la época en que se utilizaban teletipos en lugar de terminales con monitor y teclado. Con respecto a los teletipos o las máquinas de escribir, "retorno de carro" significaba mover el cursor y volver a la primera columna de texto, mientras que "avance de línea" significaba girar el rodillo para pasar a la siguiente línea. En aquella época la distinción tenía sentido. Hoy las combinaciones \n , \r , \r\n para representar el final de una línea de texto son completamente arbitrarios.

7voto

Chris Kunze Puntos 41

No es necesaria la compatibilidad con versiones anteriores de PHP_EOL en PHP4.

Es necesario corregir la afirmación de Moore sobre la disponibilidad constante de PHP_EOL: "... está declarada desde PHP 5.0.2.".

No, existe desde PHP 4.3.10. Cualquiera que todavía esté usando algo menor que eso no debería estar en el negocio de ninguna manera. A partir de hoy, ¡nadie debería usar nada menos que PHP 5!

Del manual de PHP: "PHP_EOL El símbolo correcto de 'Fin de Línea' para esta plataforma. Disponible desde PHP 4.3.10 y PHP 5.0.2".

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X