День добрый! Не могу понять почему при выводе на экран всей строки отображается как должно, а при переборе �? Подскажите в чем дело...
UPD
$string = strtolower($str);
var_dump($string[1]);
var_dump($string);
В PHP
для корректной работы с многобайтовыми строками используются отдельные функции:
https://www.php.net/manual/ru/book.mbstring.php
Так происходит потому, что вы используете многобайтовую кодировку (UTF-8). В частности, русские буквы занимают два байта/
Возьмем, например, слово "Вася". В UTF8 оно будет занимать не 4 байта, как вы наверное ожидали, а 8. Вот они
В а с я
D0 92 D0 B0 D1 81 D1 8F
Соответственно, когда вы печатаете эти байты по одному, то вывод получается не тем, который вы ожидали. И учитывая, что 7-битный ASCII заканчивается на коде 7F
, все, что выше печатается как неизвестный символ.
Собственно, как отметили в соседнем ответе - надо использовать специальные функции для работы с многобайтовыми кодировками. В вашем случае подойдет mb_split
UPD
$string = "Вася";
// Выводит "неизвестный" символ с кодом 92
var_dump($string[1]);
// Выводит непрерывную последовательность байт
// D0 92 D0 B0 D1 81 D1 8F, которая интерпретируется как "Вася"
var_dump($string);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно чтобы в заявке с формы отображалось ключевое слово, по которому пользователь перешел на сайтКто-нибудь знает как реализовать? Обработчик...
Что лучше использовать для решения таких задач в PHP (mysqL):
Как с помощью echo вывести содержимое result?