Вывод на экран русских символов php

140
26 января 2020, 07:10

День добрый! Не могу понять почему при выводе на экран всей строки отображается как должно, а при переборе �? Подскажите в чем дело...

UPD

$string = strtolower($str); 
var_dump($string[1]); 
var_dump($string);
Answer 1

В PHP для корректной работы с многобайтовыми строками используются отдельные функции:

https://www.php.net/manual/ru/book.mbstring.php

Answer 2

Так происходит потому, что вы используете многобайтовую кодировку (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);            
READ ALSO
Utm метка в заявке

Utm метка в заявке

Нужно чтобы в заявке с формы отображалось ключевое слово, по которому пользователь перешел на сайтКто-нибудь знает как реализовать? Обработчик...

119
PHP С помощью чего лучше реализовать работу с датами и временем?

PHP С помощью чего лучше реализовать работу с датами и временем?

Что лучше использовать для решения таких задач в PHP (mysqL):

102
Как с помощью echo вывести содержимое result? [дубликат]

Как с помощью echo вывести содержимое result? [дубликат]

Как с помощью echo вывести содержимое result?

132