Задать вопрос
@Crowcloud

Почему iconv_strlen (внутри функции) видит латиницу, но не видит кириллицу?

function countChars($string, $char){
    $counter = 0;
    $pointer = 0;

    while ($pointer <= iconv_strlen($string)){
        if($string[$pointer] == $char){
            $counter++;
        }
    
        $pointer++;
    }
    return $counter;
}


cрабатывает на латинице, но не срабатывает на кириллице, хотя использована именно iconv_strlen.

При этом, если вызвать ее прямо в
print_r(iconv_strlen('йцгшщзъфыджэячьбю'));

возвращает длину адекватно (var_dump говорит, что int(17)) даже без указания кодировки.

В чем же тогда проблема? Почему countChars не хочет понимать кириллицу?
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
@aleksandr97
Пишу на PHP, изучаю GOLANG
Используй для получения длины строки: mb_strlen, не зависимо от кодировки каждый символ будет равен 1, независимо от многобайтовости символа
Ответ написан
@none7
$string[$pointer] оперирует однобайтовыми символами и только ими, а в UTF-8 кириллица занимает по 2 байта на символ. С многобайтовыми символами нужно работать как то так:
$text = "Привет, мир!";
$len = mb_strlen($text);
for($i=0; $i < $len; $i++)
    echo mb_substr($text, $i, 1), "\n";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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