2008-11-01 14 views
37

¿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 forma de repetir un salto de línea que funcionará en varias plataformas?PHP Echo Line Breaks

EDIT: En respuesta a Jarod, voy a utilizar THS hacerse eco de un salto de línea en un archivo de registro .txt, aunque estoy seguro de que voy a utilizar en el futuro para cosas tales como haciendo eco HTML makup en una página.

+0

En relación con mi respuesta a continuación, ¿Cómo estás usando la salida echo'd de php? Obviamente, en una página web, la etiqueta
define un salto de línea, así que supongo que se está utilizando de forma diferente. –

Respuesta

38
  • \n es un salto de línea de Linux/Unix.
  • \r es un salto de línea clásico de Mac OS (no OS X). Mac OS X utiliza el unix anterior \n.
  • \r\n es un salto de línea de Windows.

Normalmente uso \n en nuestros sistemas Linux y la mayoría de las aplicaciones de Windows tratan bien de todos modos.

+2

Si uso \ r \ n ¿funcionará en Linux y en Windows? Además, ¿generará \ r \ n como texto en Linux si hago esto? – PHLAK

+0

No tengo acceso a Linux ahora mismo para verificarlo pero estoy bastante seguro de que el \ r no aparece correctamente en Linux si lo visualizaste como un archivo de texto. Debería ser bastante fácil probar las diversas opciones si necesita ver cómo se ven. –

+2

No, no se imprimirá, para obtener la máxima compatibilidad, use \ r \ n – UnkwnTech

28

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

  • \ r, o el carácter ASCII con código decimal 13, se denomina CR después del "retorno de carro".
  • \ n, o el carácter ASCII con código decimal 10, se denomina "nueva línea" o LF después de "avance de línea".

La terminología "retorno de carro" y "avance de línea" se remonta a cuando se usaban 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 regresar a la primera columna de texto, mientras que "avance de línea" significaba girar el rodillo para pasar a la siguiente línea. En ese momento, 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 arbitrarias.

111

Utilice la constante PHP_EOL, que se establece automáticamente en el 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 compatibilidad con versiones anteriores:

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

No es una mala idea, pero quiero mantener las cosas lo más compatibles posible. – PHLAK

+7

Tenga en cuenta que la salida no se envía necesariamente al sistema operativo en el que se está ejecutando PHP. – eyelidlessness

+4

Esta respuesta debe marcarse como la respuesta correcta. Desarrollé una aplicación y la probé en Hostmonster.com (ejecutan RedHat Linux) y el cliente implementó el código en un cuadro de CentOS. En dev "\ n" se procesó una nueva línea como se esperaba; en el cuadro CentOS no lo hizo. Una vez que cambié "\ n" a PHP_EOL, el problema desapareció y el código funcionó como se esperaba. Lección aprendida: a pesar de que el sistema operativo prod es un derivado del sistema operativo dev, y aunque "\ n" debería funcionar en todas las casillas * nix, si tiene que implementarse correctamente, siempre use PHP_EOL, nunca "\ n" –

7

Sin compatibilidad necesaria para PHP_EOL en PHP4.

Es necesario corregir la declaración de Moore sobre la disponibilidad constante de PHP_EOL: "... se declara desde PHP 5.0.2.".

No, ha estado presente desde PHP 4.3.10. Cualquier persona que todavía esté ejecutando algo menor que eso no debería estar en el negocio de todos modos. ¡A partir de hoy, nadie debería usar nada inferior a PHP 5!

From the PHP manual: "PHP_EOL The correct 'End Of Line' symbol for this platform. Available since PHP 4.3.10 and PHP 5.0.2".