@BjornBorn

Почему код некорректно работает с кириллицей?

Нужно посчитать процентное содержание каждого символа в тексте.

// исходная строка
$string = 'тестовая строка';

// строка с удаленными пробелами
$string = str_replace(' ', '', $string);

// строка, где удалены все повторяющиеся символы
$uniqueSymbols = implode(array_unique(mb_str_split($string, 1)));

// перебираем строку через цикл for
for ($i = 0; $i < mb_strlen($uniqueSymbols); $i++) {
         // символ строки           формула
    echo $uniqueSymbols[$i] .' - '. round((mb_substr_count($string, $string[$i]) / mb_strlen($string)) * 100, 1) . ' %<br><br>';
}


Если вводить английские символы, то всё работает корректно, но если вводить символы на кириллице, то вместо символов показывает кракозябры, а вместо процентов "0".
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
pickHabr
@pickHabr
Костыльных дел мастер
Потому что кириллица, когда ты берешь $uniqueSymbols[$i] ты берешь не итую букву, а итый байт

$letter = mb_substr($uniqueSymbols, $i, 1);
echo $letter .' - '. round((mb_substr_count($string, $letter) / mb_strlen($string)) * 100, 1) . ' %<br><br>';
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы