Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2010, 13:38
Новичок на форуме
Отправить личное сообщение для modernx Посмотреть профиль Найти все сообщения от modernx
 
Регистрация: 04.06.2010
Сообщений: 7

Подсчет "реальной" длины текста в textarea
1) В БД хранится описание некоторого объекта, размер поля ограничен, предположим, 1000 символов.
2) В форме пытаюсь осуществить предварительную валидацию по длине текста в TEXTAREA с помощью JS (document.form.info.value.length)

Переносы строк в Chrome подсчитываются как 1 символ, в IE - как 2 символа. В php-скрипт же (метод POST) передается реальная строка, в которой переносы выглядят как "\r\n" (4 символа).

Вопрос: Подскажите новичку, как правильно подсчитать с помощью JS дину текста в textarea, которую получит php-скрипт. Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2010, 15:06
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от modernx
переносы выглядят как "\r\n" (4 символа).
это два символа
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2010, 16:16
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Вот этому значению
document.form.info.value.length

можете доверять.
Разница в том какие символы какой браузер вставляет чтобы обозначить конец строки. IE вставляет \r\n, а Chrome - только \n. Но эти же символы в php и уйдут.

p.s. jQuery метод val() стандартизирует этот разнобой - удаляет \r
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2010, 16:51
Новичок на форуме
Отправить личное сообщение для modernx Посмотреть профиль Найти все сообщения от modernx
 
Регистрация: 04.06.2010
Сообщений: 7

Сообщение от Gvozd
переносы выглядят как "\r\n" (4 символа).
это два символа
посчитайте вручную, если не верите Строка передается как она есть:
Код
echo $_POST['info'];
echo "(".strlen(utf8_decode($_POST['info'])).")"; return;

Выдает: 1\r\n\r\n(9)

Сообщение от micscr
jQuery метод val() стандартизирует этот разнобой - удаляет \r
Это лишь часть решения, которая реализует кроссбраузерность подсчета на стороне клиента. В любом случае, серверный скрипт получает свои "\r\n" хоть их хрома, хоть из ие (пробовал вот так даже сделать перед отправкой $('#tinfo').val($('#tinfo').val())
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2010, 17:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от modernx
Выдает: 1\r\n\r\n(9)
stripslashes не забыли?
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2010, 17:27
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Сообщение от modernx Посмотреть сообщение
посчитайте вручную, если не верите
А зачем мне верить? Я знаю, что
echo strlen("\r\n");
выведет 2
Сообщение от modernx Посмотреть сообщение
Строка передается как она есть:
Код
echo $_POST['info'];
echo "(".strlen(utf8_decode($_POST['info'])).")"; return;
Выдает: 1\r\n\r\n(9)
а вот то что приходят данные искаженные наводит на мысль о например включенных magic_quotes.
Kolyaj, выше подсказал, что нужно лишнее экранирование убрать.
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2010, 17:29
Новичок на форуме
Отправить личное сообщение для modernx Посмотреть профиль Найти все сообщения от modernx
 
Регистрация: 04.06.2010
Сообщений: 7

Сообщение от Kolyaj
stripslashes не забыли?
чтобы на выходе получить 1rnrn ? Зачем?
Ответить с цитированием
  #8 (permalink)  
Старый 04.06.2010, 17:31
Новичок на форуме
Отправить личное сообщение для modernx Посмотреть профиль Найти все сообщения от modernx
 
Регистрация: 04.06.2010
Сообщений: 7

Сообщение от micscr
а вот то что приходят данные искаженные наводит на мысль о например включенных magic_quotes.
Вот такой код у меня в шапке:
function slashes(&$el)
{
if (is_array($el))
foreach($el as $k=>$v)
slashes($el[$k]);
else $el = stripslashes($el);
}

if (ini_get('magic_quotes_gpc'))
{
slashes($_GET);
slashes($_POST);
slashes($_COOKIE);
}
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2010, 17:41
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

А ты проверь - включены ли у тебя и выполняется ли
if (ini_get('magic_quotes_gpc'))
{
 // этот код
}


потому что я вообще проверяю так:
if (get_magic_quotes_gpc()) {
...
}


Цитата:
чтобы на выходе получить 1rnrn ? Зачем?
Ты введешь
w
r

И получишь:
w
r

если просмотреть исходный код страницы
Ответить с цитированием
  #10 (permalink)  
Старый 04.06.2010, 17:41
Новичок на форуме
Отправить личное сообщение для modernx Посмотреть профиль Найти все сообщения от modernx
 
Регистрация: 04.06.2010
Сообщений: 7

В общем, пока организовал такой подсчет, вроде работает:

temptext = $('#tinfo').val();
   count = 0;
   pos = temptext.indexOf("\n");
   while ( pos != -1 ) {
   count+=3;
   pos = temptext.indexOf("\n",pos+1);
   }
   document.iform.counter.value= $('#tinfo').val().length + count;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление текста в textarea и выполнение скрипта doremidon Общие вопросы Javascript 7 22.04.2010 22:34
Вставка текста в textarea после выбора select option modelisto Общие вопросы Javascript 2 14.10.2009 19:27
позиция выделенного текста в textarea, начало/конец `p r o x y jQuery 3 07.05.2009 09:08