Что выведет код Junior Строки обновлено

Байты и символы

Вопрос

Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.

<?php
$s = "Ёж";
echo strlen($s), "\n";
echo mb_strlen($s), "\n";
echo strtoupper("ёж hi"), "\n";
echo mb_strtoupper("ёж hi"), "\n";
echo ucfirst("éa"), "|", mb_substr("привет", 1, 3), "\n";

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 4, 2, ёж HI, ЁЖ HI, éa|рив. В UTF-8 «Ё» и «ж» по 2 байта: strlen 4, mbstrlen 2. strtoupper в PHP 8.2+ меняет только ASCII: ёж HI. mbstrtoupper понимает Юникод: ЁЖ HI. ucfirst тоже байтовая и не трогает é, а mbsubstr берёт 3 символа с позиции 1: рив.

Что выведет

4
2
ёж HI
ЁЖ HI
éa|рив

Разбор

В UTF-8 «Ё» и «ж» по 2 байта: strlen 4, mb_strlen 2. strtoupper в PHP 8.2+ меняет только ASCII: ёж HI. mb_strtoupper понимает Юникод: ЁЖ HI. ucfirst тоже байтовая и не трогает é, а mb_substr берёт 3 символа с позиции 1: рив.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.