Los navegadores envían " " o " "¿o depende del navegador?


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 una "Biografía" 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?

Author: Timothy Khouri, 2011-06-12

2 answers

Las especificaciones HTTP y MIME especifican que las líneas de encabezado deben terminar con \r\n, pero no están claras (algunos argumentarían que no está claro si están claras) sobre qué hacer con el contenido de un ÁREA de TEXTO. (Vea, por ejemplo, este hilo de un grupo de trabajo HTML sobre el problema.)

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

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

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

 46
Author: Ted Hopp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-07 18:11:09

¿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 se haya estandarizado satisfactoriamente, por lo que definitivamente consideraría que vale la pena normalizar las nuevas líneas 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 difiere. IE y Opera devuelven cadenas con CRLFs en; Firefox y WebKit volver LF. Por lo tanto, cualquier formulario que se envíe con ayuda de JavaScript/XMLHttpRequest es probable que venga en cualquiera de las formas.

 29
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-12 22:10:42