Вы не можете просто использовать числа смещения для доступа к многобайтовым символам.
Вам нужно использовать mb_strlen()
AND mb_substr()
для выделения нужных подстрок.
* примечание: кэширование $len
хорошая идея. mb_
функции стоят дорого; Лучше всего минимизировать количество вызовов их в сценарии.
Код: ( Демо )
$str = "слово";
$temp = "";
for ($i = 0, $len = mb_strlen($str); $i < $len; $i++) {
$temp .= mb_substr($str, $i, 1);
echo $temp . '<br>';
}
echo $temp;
Выход:
с<br>сл<br>сло<br>слов<br>слово<br>слово
В зависимости от потребностей вашего проекта, есть альтернатива, для которой не требуется переменная $temp
:
$str = "слово";
for ($i = 0, $len = mb_strlen($str); $i < $len; $i++) {
if ($i) echo '<br>';
echo mb_substr($str, 0, $i + 1);
}
// с<br>сл<br>сло<br>слов<br>слово