Qué carácter representa una nueva línea en un área de texto

87

Solo uno rápido, pero quiero asegurarme de que estoy captando variaciones entre plataformas.

Me gusta convertir las nuevas líneas ingresadas en un área de texto en una [coma], para que la salida se pueda representar en una sola línea, mi pregunta ...

Actualmente, enviando desde google chrome, cuando veo el valor, encuentro que se usa \r\npara nuevas líneas. Si lo reemplazo \r\n, sé que funcionará para Chrome en Windows 7, pero ¿qué pasa con otras plataformas? ¿Hay variaciones en lo que otros navegadores insertarán como una nueva línea dentro de un área de texto?

Ninjanoel
fuente
3
Para simplificar: ¿Todos los navegadores solo envían '\ r \ n' para representar una nueva línea ingresada en un área de texto (no estoy creando el valor mediante programación, solo lo crea el usuario en su navegador)
Ninjanoel

Respuestas:

105

Según las especificaciones HTML, los navegadores deben canonicalizar los saltos de línea en la entrada del usuario a CR LF ( \r\n), y no creo que ningún navegador se equivoque. Referencia: cláusula 17.13.4 Tipos de contenido de formulario en la especificación HTML 4.01.

En los borradores de HTML5, la situación es más complicada, ya que también se ocupan de los procesos dentro de un navegador, no solo de los datos que se envían a un controlador de formularios del lado del servidor cuando se envía el formulario. Según ellos (y la práctica del navegador), el textareavalor del elemento existe en tres variantes:

  1. el valor bruto ingresado por el usuario, no normalizado; puede contener un par CR, LF o CR LF;
  2. el valor interno, llamado "valor API", donde los saltos de línea se normalizan a LF (solo);
  3. el valor de envío, donde los saltos de línea se normalizan a pares CR LF, según las convenciones de Internet.
Jukka K. Korpela
fuente
4
HTML 5 especificaciones: w3.org/html/wg/drafts/html/CR/forms.html#the-textarea-element : the user agent should allow the user to edit, insert, and remove text, and to insert and remove line breaks in the form of "LF" (U+000A) characters.
ComFreek
¡Gracias, has hecho mi dia! Estaba confundido porque cuando envío contenido desde textarea en osx / chrome, el navegador lo envía con CR LF ..
starikovs
3
Otra pregunta es por qué cuando obtiene ".length" de textarea, cuenta CR LF como un solo carácter, pero cuando verifica en el lado del servidor (por ejemplo, con PHP strlen) serán dos caracteres ...
starikovs
2
El enlace de @ ComFreek anterior está roto hoy, use: w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza
@starikovs, supongo que esto ha sido respondido con el valor interno, llamado "valor API", donde los saltos de línea se normalizan a LF (solo); parte. Lo que ve como un carácter (a saber \n), es probablemente lo que proporciona la "API interna". Sin referencia, esto es solo mi suposición basada en el sentido común.
user907860
12

Hablar específicamente sobre áreas de texto en formularios web, para todas las áreas de texto, en todas las plataformas, \r\nfuncionará.

Si usa cualquier otra cosa, causará problemas con cortar y pegar en plataformas Windows.

Los navegadores de Windows canonicalizarán los saltos de línea cuando se envíe el formulario, pero si envía el formulario al navegador con \nsaltos de línea, encontrará que el texto no se copiará y pegará correctamente entre, por ejemplo, el bloc de notas y el área de texto.

Curiosamente, a pesar de la convención de final de línea de Unix \n, el estándar en la mayoría de los protocolos de red basados ​​en texto, incluidos HTTP, SMTP, POP3, IMAP, etc., sigue siendo \r\n. Sí, puede que no tenga mucho sentido, ¡pero eso es historia y estándares en evolución para ti!

Ben
fuente
6

Parece que, de acuerdo con la especificación HTML5 , la propiedad de valor del elemento textarea debería devolver '\ r \ n' para una nueva línea:

El valor del elemento se define como el valor bruto del elemento con la siguiente transformación aplicada:

Reemplace cada aparición de un carácter "CR" (U + 000D) no seguido por un carácter "LF" (U + 000A), y cada aparición de un carácter "LF" (U + 000A) no precedido por un carácter "CR" ( U + 000D), mediante una cadena de dos caracteres que consta de un par de caracteres U + 000D CARRIAGE RETURN "CRLF" (U + 000A).

Seguir el enlace a 'valor' deja en claro que se refiere a la propiedad de valor a la que se accede en javascript:

Los controles de formulario tienen un valor y un control. (Este último solo lo utilizan los elementos de entrada). Se utilizan para describir cómo el usuario interactúa con el control.

Sin embargo, en los cinco navegadores principales (que usan Windows, 27/11/2015), si se escribe '\ r \ n' en un área de texto, se elimina la '\ r'. (Para probar: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Esto es cierto para IE desde v9. Antes de eso, IE devolvía '\ r \ n' y convertía tanto '\ r' como '\ n' a '\ r \ n' (que es la especificación HTML5). Entonces ... estoy confundido.

Para estar seguro, generalmente es suficiente usar '\ r? \ N' en expresiones regulares en lugar de solo '\ n', pero si se debe conocer la secuencia de nueva línea, se puede realizar una prueba como la anterior en la aplicación.

barncat
fuente
Desde la misma página, ¿el valor obtenido a través de JS no se llama valor API?
Anshul
@Anshul - Entiendo lo que quieres decir. La pregunta original era "Actualmente, enviando desde Google Chrome, cuando veo el valor, encuentro que usa \ r \ n para nuevas líneas ..." Entonces, dado que se está "enviando", supongo que se está leyendo el valor. el servidor. Supuse que era con JS. De todos modos, espero que los hechos que publiqué sean de alguna utilidad. Gracias por tu comentario.
barncat
@brancat, creo que el idioma del servidor no debería importar aquí. La especificación HTML5 es muy clara en 2 cosas para un textarea. 1. El cuerpo de la Solicitud solo tendrá \ r \ n 2. El valor JS solo tendrá \ n independientemente de si usa \ r, \ r \ n o \ n mientras escribe. También coincide con su hallazgo con IE9 +.
Anshul
5

- Line Feed and 
 Carriage Return

Estas entidades HTML insertarán una nueva línea o retorno de carro dentro de un área de texto.

Damodar Das
fuente
11
realmente no responde la pregunta
cherouvim
2
@cherouvim, no puedo entender por qué has votado en contra de esta respuesta. ¿Ha leído la pregunta anterior? ¡Por favor, no dé una respuesta errónea a un comentario sin entender nada!
Mahbub
3
@Mahbub: Esta respuesta tiene actualmente 3 votos negativos porque no responde la pregunta.
Cherouvim
No responde a la pregunta.
Mike Devenney
1
Bueno, estaba buscando lo que & # 13; entiende y esta respuesta me ayudó, así que no se sienta mal, toda la información es buena información y ayuda a las personas a cabo en momentos aleatorios :)
jackrabbithanna