characters - javascript multiline string
La longitud de la cadena difiere de JavaScript a Java (3)
Tengo una página JSP con un código de validación de JavaScript que limita una cierta cantidad de caracteres en el envío. Estoy usando un <textarea>
así que no puedo simplemente usar un atributo de longitud como en <input type="text">
.
Uso document.getElementById("text").value.length
para obtener la longitud de la cadena. Estoy ejecutando Firefox 3.0 en Windows (pero también he probado este comportamiento con IE 6). El formulario se envía a un servlet J2EE. ¡En mi servlet de Java, la longitud de la cadena del parámetro es mayor que 2000!
Me di cuenta de que esto se puede reproducir fácilmente agregando retornos de carro en <textarea>
. He usado Firebug para afirmar la longitud del <textare>
y realmente tiene 2000 caracteres. En el lado de Java, sin embargo, los retornos de carro se convierten al estilo UNIX ( /r/n
, en lugar de /n
), por lo que la longitud de la cadena es diferente.
¿Me estoy perdiendo algo obvio aquí o qué? De lo contrario, ¿de qué manera confiable (multiplataforma / navegador) se aseguraría de que el <textarea>
sea limitado?
¿Lo está limitando a 2000 caracteres por lo que cabe dentro de una columna nvarchar (2000) en una base de datos? De lo contrario, tal vez solo permita que un 2% de exceso sea flexible en el lado de Java.
Y Java debería usar Unicode UTF16 para representar cadenas. ¿Eso /r
debe haber entrado en otro lugar, tal vez una conversión en el navegador web cuando se envía? ¿Has probado diferentes navegadores? En diferentes plataformas? Puede que simplemente tenga que quitar el /r
s.
¿Te preocupa particularmente qué terminaciones de línea se usan? ¿Por qué no simplemente hacer que Java convierta "/ r / n" a "/ n"? (Tenga en cuenta que "/ r / n" es el estilo de Windows; "/ n" es el estilo de Unix).
Alternativamente, haga lo contrario cuando verifique la longitud dentro del JavaScript.
Esto no es realmente un problema de JavaScript (o Java): ambas capas informan una longitud precisa para la cadena con la que están tratando. El problema en su caso es que la cadena se transforma durante la transmisión HTTP.
Si debe asegurarse de que la cadena no exceda una determinada longitud, puede imitar esta transformación en el cliente reemplazando cada instancia de "/ n" con "/ n / r", pero solo para fines de verificación de longitud:
textarea.value.replace(//n/g, "/r/n").length