Я использую document.getElementById("text").value.length
чтобы получить длину строки через javascript и mb_strlen($_POST['text'])
чтобы получить длину строки PHP, и оба очень сильно отличаются. Возврат каретки преобразуется в javascript до получения длины строки, но я думаю, что некоторые символы не учитываются.
Например,
[B] 15. Umieszczanie obrazka z logo na stronie zespołu [/ b]
Этот блок текста вычисляется 57 в javascript и 58 в PHP. Когда текст становится длинным, разница увеличивается. Есть ли способ преодолеть это?
Если вы пытаетесь получить длину кодированной строки UTF-8 в PHP, вы должны указать кодировку во втором параметре mb_strlen
, например:
mb_strlen($_POST['text'], 'UTF-8')
Кроме того, не забудьте вызвать stripslashes
на POST-var.
Я нашел эквивалентную функцию mb_strlen для Javascript, возможно, это может быть полезно для кого-то еще:
function mb_strlen(str) { var len = 0; for(var i = 0; i < str.length; i++) { len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? 2 : 1; } return len; }
Спасибо всем, кто пытался помочь!
Я заметил, что там есть нестандартный символ (ł) – я не уверен, как PHP считается нестандартным, но он может считать это как два. Что произойдет, если вы запустите тест без этого символа?
Это должно сделать трюк
function mb_strlen (s) { return ~-encodeURI(s).split(/%..|./).length; }