Почему функция для строки на русском языке работает не так как для строки на английском?
Столкнулся с такой интересной проблемой.
function replacingLettersSingString(string $str):string{
$arr=explode(' ',$str);
$newStr='';
foreach($arr as $word){
if(strlen($word)>=5) $newStr.=self::replacingLettersSingWord($word);
else $newStr.=" $word";
}
return $newStr;
}
function replacingLettersSingWord(string $str):string{
$result=' ';
for($i=0;$i<strlen($str);$i++){
if($i<=5) $result.=$str[$i];
else break;
}
return $result.='*';;
}
replacingLettersSingString('I bought an armored personnel carrier').'<br>';
replacingLettersSingString('я купив бронетранспортер учора');
Вывод такой:
I bought* an armore* person* carrie*
я куп* бро* учо*
Подскажите пожалуйста почему с строкой на английском все нормально, а со строкой на русском/украинском не работает как надо и как это исправить?
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Русский - многобайтовый язык %) (точнее строки)
Надо использовать функции с приставкой mb_
См. список функций в доках:
Автор решения: Денис Сепетов
→ Ссылка
Верно сказали - не хватает пакета mbstring. Установите его в систему. Если у вас что-то похожее на ubuntu, то примерно так:
sudo apt install php-mbstring
Название пакета может отличаться. Например, php8.1-mbstring. А потом вместо стандартных функций работы со строками нужно будет использовать их.
Вероятно, после установки ещё потребуется поправить php.ini, раскомментировав строчку:
extension=mbstring