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\n
para 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?
Respuestas:
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
textarea
valor del elemento existe en tres variantes:fuente
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
.\n
), es probablemente lo que proporciona la "API interna". Sin referencia, esto es solo mi suposición basada en el sentido común.Hablar específicamente sobre áreas de texto en formularios web, para todas las áreas de texto, en todas las plataformas,
\r\n
funcionará.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
\n
saltos 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!fuente
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:
Seguir el enlace a 'valor' deja en claro que se refiere a la propiedad de valor a la que se accede en javascript:
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.
fuente
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 +. - Line Feed and Carriage Return
Estas entidades HTML insertarán una nueva línea o retorno de carro dentro de un área de texto.
fuente