Я пытаюсь получить длину этой строки символов Unicode
$text = 'نام سلطان م'; $length = strlen($text); echo $length;
вывод
20
Как он определяет длину строки символов Unicode?
strlen()
не обрабатывает многобайтовые символы правильно, так как предполагает, что 1 char равно 1 байт, что просто недействительно для unicode. Это поведение описано здесь: http://php.net/strlen
strlen () возвращает количество байтов, а не количество символов в строке.
Решение заключается в использовании функции mb_strlen()
вместо ( mb
означает multi byte
) ( см. Mb_strlen () docs ).
РЕДАКТИРОВАТЬ
Если по какой-либо причине изменение кода невозможно / выполнимо, можно попытаться гарантировать, что строковые функции автоматически перегружаются многобайтовыми аналогами. Это поддерживается PHP и документируется здесь .
Обратите внимание, что вы также можете отредактировать php.ini
чтобы убедиться, что mb_string работает так, как вы этого хотите. Доступные настройки описаны здесь .
Вы ищете mb_strlen
.
Функция strlnen
не подсчитывает количество символов, а количество байтов. Для многобайтовых символов он будет возвращать более высокие цифры.
mb_strlen()
этого используйте mb_strlen()
чтобы подсчитать фактическое количество символов.
Так же, как добавление к другому, ссылается на ссылку mb_strlen()
:
Если параметр php.in
mbstring.func_overload
имеет бит 2, установленный в 1, то strlen
будет подсчитывать символы на основе кодировки по умолчанию; в противном случае он будет подсчитывать количество байтов в строке