Длина строки Javascript отличается от PHP mb_strlen

Я использую 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; }