2011-01-28 14 views
25

He visto muchos desarrolladores usar diferentes métodos para dividir una cadena por nuevas líneas, pero estoy confundido, ¿cuál es la correcta: \r\n O \n solamente?¿Hay una línea nueva = n OR r n?

+3

Nunca he visto '\ n \ r'. Por lo general, '\ r \ n' si usan dos. – icktoofay

+0

Esto realmente depende del formato del archivo/cadena que está procesando. – MrGlass

+2

Hay una constante PHP_EOL disponible si desea incrustar los caracteres eol del sistema nativo en sus cadenas. Sin embargo, no ayuda mucho si se trata de texto que proviene de otros sistemas. –

Respuesta

55

\n se utiliza para sistemas Unix (incluidos Linux y OSX).

\r\n se usa principalmente en Windows.

\r se usa en equipos Mac muy antiguos.

+0

también se usa a veces en macs actuales, según el editor de texto. La mayoría de los editores de texto sin formato han cambiado al estilo de Unix. – ughoavgfhw

+0

Muy bien. Para ser más específico para aquellos que no saben, "la mayoría de los sistemas UNIX" que usan '\ n' incluyen Mac OS X. – Wiseguy

+3

Para que quede claro: realmente los antiguos Mac aquí significan programas codificados para OS 9, que fue declarado muerto en 2002. – Yuji

3

Si está programando en PHP, es útil para dividir líneas por \n y luego trim() cada línea (siempre que no se preocupan por el espacio en blanco) para darle una línea "limpia" sin tener en cuenta.

foreach($line in explode("\n", $data)) 
{ 
    $line = trim($line); 
    ... 
} 
22

La respuesta dada está muy incompleta. De hecho, está tan lejos de ser completo que tiende a llevar al lector a creer que esta respuesta depende del sistema operativo cuando no lo es. Tampoco es algo que dependa del lenguaje de programación (como lo han sugerido algunos comentaristas). Voy a agregar más información para que quede más claro. En primer lugar, vamos a dar la lista de nuevas variaciones línea actual (como en, lo que han pasado desde 1999):

  • \r\n sólo se utiliza en Windows Bloc de notas, la línea de comandos de DOS, la mayor parte de la API de Windows y en algunas (viejas) aplicaciones de Windows.
  • \n se utiliza para todos los demás sistemas, aplicaciones e Internet.

Se dará cuenta de que he puesto la mayoría de aplicaciones de Windows en el grupo \n que pueden ser un poco controvertido, pero antes de que usted no está de acuerdo con esta declaración, por favor tomar un archivo de texto con formato UNIX y probarlo en 10 Web fácil de Windows aplicaciones de su elección (que no figuran en mis excepciones anteriores). ¿Qué porcentaje de ellos lo manejó bien? Descubrirá que (prácticamente) todos implementan detección automática de terminaciones de línea o simplemente usan \n porque, aunque Windows puede usar \r\n, Internet usa \n. Por lo tanto, es recomendable que las aplicaciones utilicen solo \n si desea que su salida sea compatible con Internet.

PHP también define un carácter de línea nueva llamado PHP_EOL. Esta constante se establece en la cadena de nueva línea específica del sistema operativo para la máquina en la que PHP se ejecuta (\r\n para Windows y \n para todo lo demás). Esta constante no es muy útil para las páginas web y se debe evitar para el resultado HTML o para escribir la mayoría del texto en los archivos. Se vuelve MUY útil cuando pasamos a la salida de línea de comando de las aplicaciones de PHP porque permitirá que su aplicación salga a una Ventana de terminal de manera consistente en todos los sistemas operativos compatibles.

Si desea que sus aplicaciones PHP para trabajar desde cualquier servidor que se colocan en, las dos cosas más importantes a tener en cuenta es que siempre se debe sólo tiene que utilizar \n a menos que sea la salida del terminal (en cuyo caso se utiliza PHP_EOL) y también debe usar SIEMPRE / para su separador de ruta (no \).

La explicación aún más tiempo:

una aplicación puede optar por utilizar cualquier línea terminaciones que le gusta, independientemente de la línea de sistema operativo por defecto que termina estilo. Si quiero que mi editor de texto imprima una nueva línea cada vez que encuentre un período que no sea más difícil que usar el \n para representar una nueva línea, porque estoy interpretando el texto como lo mostraré de todos modos. IOW, estoy jugueteando con medir el ancho de cada personaje para que sepa dónde mostrar el siguiente, así que es muy simple agregar una afirmación que diga que si el char actual es un período, entonces realice una acción de nueva línea (o si es a \n y luego mostrar un período).

Además del terminador nulo, ningún código de carácter es sagrado y cuando escribe un editor de texto o un visualizador, se encarga de traducir los bits del archivo a glifos (o retornos de carro) en la pantalla. Lo único que distingue a un personaje de control como la nueva línea de otros personajes es que la mayoría de los conjuntos de fuentes no los incluyen (lo que significa que no tienen una representación visual disponible).

Dicho esto, si trabaja con un mayor nivel de abstracción, entonces probablemente no esté haciendo sus propios controles de cuadro de texto. Si este es el caso, entonces estás atascado con la línea final que el control pone a tu disposición. Incluso en este caso, es una cuestión simple detectar automáticamente el estilo de final de línea de cualquier cadena y realizar la conversión antes de cargar el texto en el control y luego deshacerlo cuando lee de ese control. Es decir, si eres un desarrollador de aplicaciones de escritorio y tu aplicación no reconoce \n como una nueva línea, entonces no es una aplicación muy amigable y realmente no tienes excusa porque no es difícil hacerlo de la manera correcta. También significa que cualquiera que haya escrito Notepad debería estar avergonzado de sí mismo porque realmente es muy fácil hacerlo mucho mejor y muchas personas sufren al usarlo todos los días.

+1

"siempre debería usar' \ n' a menos que sea una salida de terminal "- Lo sospeché, pero esta claridad en el razonamiento es justo lo que estaba buscando. – sfarbota

+0

Está muy lejos con la afirmación "\ n se usa para todos los demás sistemas, aplicaciones e Internet". Muchos protocolos de Internet requieren las terminaciones de línea \ r \ n Se requiere que los encabezados Http terminen con \ r \ n y los encabezados y el mensaje se separen con \ r \ n – Raatje

+0

Véase también HTTP (7230), SMTP (RFC5321), POP3 (RFC1939) y correo electrónico (RFC2822) que indican DEBEN para \ r \ n terminaciones de línea – Raatje

Cuestiones relacionadas