@Anton_volkov

Как в php 7.3 установить внутренную кодировку в utf-8 чтобы строковые функции (н: strlen) правильно работали с много байтовыми кодировками?

тут https://habr.com/ru/company/avito/blog/335584/#ust...
сказали:
"В php.7.2 strlen() больше не будет возвращать длину строки в байтах, вместо этого она вернет длину в символах в соответствии с текущей выбранной внутренней кодировкой"
Теперь я не знаю как установить внут кодировку
попробовал так:
<?php
mb_internal_encoding("UTF-8"); 
$a = 'русский';
echo strlen($a);

но выводить 14
Так как же мне установить это?
  • Вопрос задан
  • 1558 просмотров
Пригласить эксперта
Ответы на вопрос 3
возможно стоит подумать в сторону использования mb_strlen() вместо strlen() ?
Ответ написан
Комментировать
@neol
По вашей ссылке идёт объяснение как работает mbstring.func_overload и почему это плохо, а не изменение поведения функции strlen. Т. е. начиная с 7.2 поведение функции strlen становится более предсказуемым (т. к. не зависит от конфигурации). А для многобайтовых кодировок должны использоваться соответствующие функции mb_*.
Ответ написан
Комментировать
Minifets
@Minifets
Hello world!!!
1) Там написано, что параметр func_overload в php.ini.
Если вы хотите чтобы strlen функция была перегружана, то в php.ini нужно указать:
mbstring.func_overload = 2


2) Начиная с 7.2 версии этот параметр считается устаревшим и должен быть строго = 0, иначе код будет выкидывать notice. Т.е. нужно использовать функции из модуля mbstring напрямую, mb_strlen вместо strlen.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы