2013-02-11 3 views
1

Здравствуйте, вот в чем проблема: , когда я добираюсь до $ _POST латинской строки strilen() работает отлично, но когда я получаю кириллическую строку strlen(), удваивает ее значение, вот код :Php длина кириллической строки удваивает ее значение

$word = $_POST['word']; 
echo strlen($word) . '<br>'; //input: abc -> returns 3, input: абв -> returns 6 
var_dump($word); //input: abc -> returns string 'abc' (length=3), input: абв -> returns string 'абв' (length=6) 

У вас есть идеи ?!

ответ

7

strlen не удваивает ничего, он просто сообщает, в чем ситуация. В частности, он сообщает , сколько байтов - и не , сколько символов - составьте строку. Это потому, что strlen не знает, что такое «символ», и слепо предполагает, что 1 байт = 1 символ. Поэтому мы говорим, что «strlen не является многобайтовым».

В вашем случае кажется, что браузер передает кодированные данные UTF-8 на сервер. В UTF-8 кириллица имеет два байта на символ.

Если вы хотите узнать количество символов в строке, используйте многобайтный-Aware mb_strlen:

echo mb_strlen($word, 'UTF-8'); 
+0

мм, как это исправить? или просто разделить его на 2? – fre2ak

+0

@FretwoakDukov: Как исправить то, что именно? – Jon

+0

Я просто хочу, когда я получу переменную из сообщения, чтобы вырезать последние четыре символа в подстроку, поэтому я делаю это: $ stringLength = strlen ($ string); return substr ($ string, $ stringLength - 4, $ stringLength); но ... не работает хорошо – fre2ak