tag page new html browser web-standards line-breaks

html - page - ¿Los navegadores envían "/ r / n" o "/ n" o depende del navegador?



page break html (2)

¿Qué envían los navegadores para un <textarea></textarea> si tiene varias líneas?

Todos los navegadores modernos envían CRLF ( /r/n ). Sin embargo, esto no es algo que haya sido satisfactoriamente estandarizado, por lo que definitivamente consideraría que vale la pena normalizar las líneas nuevas de todo el texto de entrada de varias líneas.

Cuando el valor se lee a través de JavaScript en lugar de enviarse directamente desde un formulario, el comportamiento del navegador es diferente. IE y Opera devuelven cadenas con CRLF en; Firefox y WebKit devuelven LF. Entonces, cualquier formulario que se envíe con la ayuda de JavaScript / XMLHttpRequest es probable que venga de cualquier forma.

Esta pregunta me ha molestado durante un millón de años ... cada vez que creo un sitio web con un área de texto que permite varias líneas (como un "Bio" para el perfil de un usuario) siempre termino escribiendo el siguiente código paranoico:

// C# code sample... bio = bio.Replace("/r/n", "/n").Replace("/r", "/n"); bio = Regex.Replace(@"/n{2,}", "/n/n");

Entonces, ¿qué envían los navegadores para un <textarea name="Bio"></textarea> si tiene varias líneas?


Las especificaciones HTTP y MIME especifican que las líneas de encabezado deben terminar con / r / n, pero no están claras (algunos argumentarán que no está claro si son claras) sobre qué hacer con los contenidos de un TEXTAREA. (Ver, por ejemplo, este hilo de un grupo de trabajo HTML sobre el tema).

Aquí hay una cita de la especificación HTTP / 1.1 sobre los encabezados de los mensajes:

El terminador de línea para campos de encabezado de mensaje es la secuencia CRLF. Sin embargo, recomendamos que las aplicaciones, al analizar dichos encabezados, reconozcan un solo LF como un terminador de línea e ignoren el CR principal.

Creo que es una buena estrategia en general: sé estricto con lo que produces pero liberal en lo que aceptas. Debe suponer que recibirá todo tipo de terminadores de línea. (Tenga en cuenta que además de CRLF y LF, Mac OS-9 usó CR solo, y todavía hay algunos de ellos alrededor. El estándar Unicode (sección 5.8) especifica una amplia gama de secuencias de caracteres que deberían reconocerse como terminadores de línea; hay una lista de ellos here ).