Domanda

Ho una pagina JSP con un pezzo di codice di convalida Javascript che limita a un certo numero di caratteri al momento dell'invio. Sto usando un <textarea> quindi non posso semplicemente usare un attributo di lunghezza come in un <input type="text">.

Uso document.getElementById("text").value.length per ottenere la lunghezza della stringa. Sto eseguendo Firefox 3.0 su Windows (ma ho testato questo comportamento anche con IE 6). Il modulo viene inviato a un servlet J2EE. Nel mio servlet Java la lunghezza della stringa del parametro è maggiore di 2000!

Ho notato che questo può essere facilmente riprodotto aggiungendo i ritorni a capo nel <textare>. Ho usato Firebug per affermare la lunghezza di \r\n ed è davvero lungo 2000 caratteri. Sul lato Java, tuttavia, i ritorni a capo vengono convertiti in stile UNIX (\n, anziché <=>), quindi la lunghezza della stringa differisce!

Mi sto perdendo qualcosa di ovvio qui o cosa? In caso contrario, in che modo verrebbe assicurato (multipiattaforma / browser) in modo che <=> sia limitato.

È stato utile?

Soluzione

Questo non è in realtà un problema JavaScript (o Java): entrambi i livelli riportano una lunghezza precisa per la stringa con cui hanno a che fare. Il problema nel tuo caso è che la stringa viene trasformata durante la trasmissione HTTP.

Se devi assolutamente assicurarti che la stringa non superi una certa lunghezza, puoi imitare questa trasformazione sul client sostituendo ogni istanza di " \ n " con " \ n \ r " - ma solo a fini di verifica della lunghezza:

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

Altri suggerimenti

Ti interessa in particolare quali estremità vengono utilizzate? Perché non solo fare in modo che Java converta & Quot; \ r \ n & Quot; a " \ n " ;? (Nota che & Quot; \ r \ n & Quot; è lo stile di Windows; & Quot; \ n & Quot; è lo stile Unix.)

In alternativa, fai il contrario quando controlli la lunghezza all'interno di JavaScript.

Lo stai limitando a 2000 caratteri in modo che rientri in una colonna nvarchar (2000) in un database? In caso contrario, è possibile consentire a un superamento del 2% di essere flessibile sul lato Java

E Java dovrebbe usare Unicode UTF16 per rappresentare le stringhe. Che /r deve essere entrato lì da qualche altra parte, forse una conversione nel browser web durante l'invio? Hai provato diversi browser? Su piattaforme diverse? Potrebbe essere necessario eliminare le <=> s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top