Question

J'ai une page JSP avec un morceau de code de validation Javascript qui limite à un certain nombre de caractères lors de l'envoi. J'utilise un <textarea> afin que je ne puisse pas simplement utiliser un attribut de longueur comme dans un <input type="text">.

J'utilise document.getElementById("text").value.length pour obtenir la longueur de la chaîne. J'exécute Firefox 3.0 sur Windows (mais j'ai aussi testé ce comportement avec IE 6). Le formulaire est soumis à un servlet J2EE. Dans mon servlet Java, la longueur de chaîne du paramètre est supérieure à 2000!

J'ai remarqué que cela peut facilement être reproduit en ajoutant des retours à la ligne dans le <textare>. J'ai utilisé Firebug pour affirmer la longueur du \r\n et il contient en réalité 2000 caractères. Du côté Java, les retours à la ligne sont convertis au style UNIX (\n au lieu de <=>), la longueur de la chaîne est donc différente!

Me manque-t-il quelque chose d'évident ou quoi? Sinon, comment feriez-vous de manière fiable (multiplate-forme / navigateur) que le <=> soit limité.

Était-ce utile?

La solution

Ce n'est pas vraiment un problème JavaScript (ou Java) - les deux couches rapportent une longueur précise pour la chaîne à laquelle elles ont affaire. Le problème dans votre cas est que la chaîne est transformée lors de la transmission HTTP.

Si vous devez absolument vous assurer que la chaîne ne dépasse pas une certaine longueur, vous pouvez imiter cette transformation sur le client en remplaçant chaque instance de " \ n " avec " \ n \ r " - mais uniquement à des fins de vérification de la longueur:

textarea.value.replace(/\n/g, "\r\n").length

Autres conseils

Vous souciez-vous particulièrement des fins de lignes utilisées? Pourquoi ne pas simplement faire en Java convertir & "; \ R \ n &"; à " \ n " (Notez que & "; \ R \ n &" Est le style Windows; & "\ \ &" Est le style Unix.)

Vous pouvez également faire l'inverse lorsque vous vérifiez la longueur dans le code JavaScript.

Limitez-vous le nombre de caractères à 2 000 pour qu'il soit contenu dans une colonne nvarchar (2000) d'une base de données? Sinon, permettez peut-être simplement à un dépassement de 2% d'être flexible du côté de Java.

Et Java devrait utiliser Unicode UTF16 pour représenter Strings. Ce /r doit être entré ailleurs, peut-être une conversion dans le navigateur Web lors de la soumission? Avez-vous essayé différents navigateurs? Sur différentes plateformes? Vous devrez peut-être simplement supprimer les <=> s.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top