Подсчет "реальной" длины текста в textarea
1) В БД хранится описание некоторого объекта, размер поля ограничен, предположим, 1000 символов.
2) В форме пытаюсь осуществить предварительную валидацию по длине текста в TEXTAREA с помощью JS (document.form.info.value.length) Переносы строк в Chrome подсчитываются как 1 символ, в IE - как 2 символа. В php-скрипт же (метод POST) передается реальная строка, в которой переносы выглядят как "\r\n" (4 символа). Вопрос: Подскажите новичку, как правильно подсчитать с помощью JS дину текста в textarea, которую получит php-скрипт. Спасибо! |
Цитата:
|
Вот этому значению
document.form.info.value.length можете доверять. Разница в том какие символы какой браузер вставляет чтобы обозначить конец строки. IE вставляет \r\n, а Chrome - только \n. Но эти же символы в php и уйдут. p.s. jQuery метод val() стандартизирует этот разнобой - удаляет \r |
Цитата:
Код echo $_POST['info']; echo "(".strlen(utf8_decode($_POST['info'])).")"; return; Выдает: 1\r\n\r\n(9) Цитата:
|
Цитата:
|
Цитата:
echo strlen("\r\n"); выведет 2 Цитата:
Kolyaj, выше подсказал, что нужно лишнее экранирование убрать. |
Цитата:
|
Цитата:
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); } |
А ты проверь - включены ли у тебя и выполняется ли
if (ini_get('magic_quotes_gpc')) { // этот код } потому что я вообще проверяю так: if (get_magic_quotes_gpc()) { ... } Цитата:
w r И получишь: w r если просмотреть исходный код страницы |
В общем, пока организовал такой подсчет, вроде работает:
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; |
Цитата:
|
Цитата:
Всем спасибо! :thanks: |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Character count test</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 0.18.1.1" /> <style type="text/css"> #report { white-space: -moz-pre-wrap; /* Mozilla, supported since 1999 */ white-space: -pre-wrap; /* Opera 4 - 6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 - Text module (Candidate Recommendation) http://www.w3.org/TR/css3-text/#white-space */ word-wrap: break-word; /* IE 5.5+ */ } </style> <script type="text/javascript"> function count_symbols() { var val = document.getElementById('counter').value, len = val.replace(/\r\n/g, '\n').length; document.getElementById('report'). appendChild(document.createTextNode(len + '\n')); } </script> </head> <body> <p><textarea id="counter" rows="5" cols="20">это просто тест</textarea></p> <p><button onclick="count_symbols()">Count</button></p> <p id="report"></p> </body> </html> Какой идиот придумал виндовые переводы строк... |
Цитата:
Хмм... А вот как из Линуксового браузера уйдёт такой текст весьма интересно... |
Цитата:
|
Цитата:
|
Цитата:
|
Кто на что горазд:)
|
Эх, еще бы в BolgenOS реализовали \n\r, для полноты ощущений :)
|
\x00\n, чтобы уж совсем экстремально.
|
Цитата:
А т.к. в компьютере возврат корректки не актуален, то в юниксах решили его убрать. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 23:08. |