Вопрос

У меня есть страница JSP с фрагментом кода проверки Javascript, который ограничивается определенным количеством символов при отправке. Я использую <textarea>, поэтому я не могу просто использовать атрибут длины, как в <input type="text">.

Я использую document.getElementById("text").value.length, чтобы получить длину строки. Я использую Firefox 3.0 в Windows (но я проверял это поведение и в IE 6). Форма отправляется сервлету J2EE. В моем Java-сервлете длина строки параметра больше 2000!

Я заметил, что это легко можно воспроизвести, добавив возврат каретки в <textare>. Я использовал Firebug для определения длины \r\n, и он действительно имеет длину 2000 символов. На стороне Java возврат каретки преобразуется в стиль UNIX (\n вместо <=>), поэтому длина строки отличается!

Я что-то упускаю здесь или как? Если нет, то как вы надежно (кроссплатформенный / браузерный) убедитесь, что <=> ограничен.

Это было полезно?

Решение

На самом деле это не проблема JavaScript (или Java) - оба слоя сообщают точную длину строки, с которой имеют дело. Проблема в вашем случае заключается в том, что строка преобразуется во время передачи HTTP.

Если вам абсолютно необходимо убедиться, что строка не превышает определенной длины, вы можете имитировать это преобразование на клиенте, заменяя каждый экземпляр " \ n " с " \ n \ r " - но только для проверки длины:

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

Другие советы

Вас особенно волнует, какие концы строк используются? Почему бы просто не заставить Java конвертировать & Quot; \ r \ n & Quot; " \ n " ;? (Обратите внимание, что & Quot; \ r \ n & Quot; это стиль Windows; & Quot; \ n & Quot; это стиль Unix.)

Либо сделайте обратное, проверяя длину в JavaScript.

Вы ограничиваете его до 2000 символов, чтобы он помещался в столбце nvarchar (2000) в базе данных? В противном случае возможно просто допустить переполнение на 2% на стороне Java.

И Java должна использовать Unicode UTF16 для представления строк. Это /r должно быть там где-то еще, может быть, конверсия в веб-браузере при отправке? Вы пробовали разные браузеры? На разных платформах? Возможно, вам просто придется удалить <=> s.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top