2009-03-20 16 views
9

Necesito publicar datos de varias líneas a través de un campo oculto. Los datos se verán en un área de texto después de la publicación. ¿Cómo puedo publicar una nueva línea/devolución de carro en el formulario html?Publicar nueva línea/retorno de carro como valor de campo oculto

he tratado \ r \ n, sino que simplemente Mensajes de la actual "\ r \ n" datos

<input type="hidden" name="multiline_data" value="line one\r\nline two" /> 

¿Hay una manera de hacer esto?

Respuesta

5

Depende del juego de caracteres realmente pero & # 10; debe ser linefeed y & # 13; debe ser el retorno del carro Debería poder usarlos en el atributo de valor.

+0

Si un navegador compatible con el envío de formularios, es muy probable que también se dan cuenta de que ' ' y ' ' de nuevas líneas, y si incorrectamente elimina nuevas líneas, sino que también eliminará todas las apariciones de ' 'y' '. – 0b10011

2

No dice para qué sirve o qué tecnología está utilizando, pero debe tener en cuenta que no puede confiar en que el campo oculto permanezca con value = "line one line two", porque un usuario hostil puede manipularlo antes de que se envíe de regreso al POST. Dado que está poniendo el valor en <textarea> más adelante, definitivamente estará sujeto, por ejemplo, a ataques de scripts cruzados a menos que verifique y/o desinfecte su contenido de campo "multiline_data" antes de volver a escribirlo.

Al escribir un valor en un campo oculto y leerlo nuevamente, generalmente es mejor guardarlo en el servidor, como un atributo de la sesión, o el flujo de página, o lo que sea que su entorno proporcione para hacer este tipo de cosas.

11

En lugar de utilizar

<input type="hidden">

Trate de usar

<textarea style="visibility:hidden;position:absolute;">

+0

'style =" display: none; "' probablemente sea más succint – megaflop

+0

@daiscog Los elementos del formulario establecidos en 'display: none' [no siempre se envían] (http://stackoverflow.com/a/8318442/526741). No estoy seguro de qué navegadores hacen y no envían campos 'display: none', pero de acuerdo con los comentarios de esa respuesta, IE8 no *. – 0b10011

9

Mientras que las nuevas líneas (retorno de carro & avance de línea) está técnicamente autorizada en < de entrada> 's oculta Estado , deberían escaparse para compatibilidad con navegadores más antiguos. Puede hacerlo reemplazando todas las devoluciones de carro (\u000D o \r) y todas las alimentaciones de línea (\u000A o \n) con cadenas propietarias que su aplicación reconoce que son una devolución de carro o una nueva línea (y también escapadas, si están presentes en el original cuerda).

En pocas entidades de carácter no trabajo aquí, debido a la no conformidad de los navegadores, posiblemente, sabiendo &#10; y &#13; son nuevas líneas y despojarlas del valor.

Ejemplo

Por ejemplo, en PHP, si tuviera que echo el valor pasado a un área de texto, que incluiría los saltos de línea (y cadena sin escape).

< área de texto> Un texto con una \ incluido
y una nueva línea con \ r \ n como el valor presentado </textarea>

Sin embargo, en PHP, si tuviera que echo la valor al valor atributo de una etiqueta input> <, usted escaparía de las nuevas líneas con sus cadenas patentadas (por ejemplo, \r y \n), y escapará cualquier instancia de sus cadenas propietarias en el valor enviado.

< tipo de entrada = valor "oculta" = "Algunas de texto con un \\ incluido \ r \ ny una nueva línea \\ r \\ n como valor presentado">

Entonces, antes de utilizando el valor en otro lugar (insertando en una base de datos, enviando correos electrónicos, etc.), asegúrese de eliminar el valor enviado, si es necesario.

Reassurance

Como garantía adicional, que pidió el WHATWG, e Ian Hickson, editor de la especificación HTML Actualmente, respondió:

bfrohs tipo de pregunta acerca < entrada = hidden> - ¿Se permiten las alimentaciones de línea y las devoluciones de carro en el valor? Están específicamente prohibidos en estado de texto y estado de búsqueda, pero no se menciona el estado oculto. Y, si no, ¿existe una solución HTML aceptable para almacenar datos de formulario de un área de texto?

Hixie sí, se les permite // // IIRC por razones de compatibilidad puede que desee escapar de ellos, aunque como algunos navegadores ellos normalizan distancia // me olvido de que si nos fijamos o no // en la especificación

Source