PHP. Вместо символа кириллицы печатается заменяющий символ �. Как исправить?

Здравствуйте, делаю функцию которая возвращает последнею букву фамилии. Но вместо этого возвращается �. Как исправить?
<?php
function getPartsFromFullname($human){
    $human =  explode(' ' , $human);
    $ar['name'] = $human[0];
    $ar['surname'] = $human[1];
    $ar['patronomyc'] = $human[2];
    return $ar;
}
function getGenderFromName($human){
    $ar = getPartsFromFullname($human);
    $name = $ar['name'];
    $surname = $ar['surname'];
    // $lastSymmbol = substr($ar['surname'], -1);
    $t = substr($surname, -1);
    return $t;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
    echo getGenderFromName('Иван Иванов Иванович');
    ?>
</body>
</html>
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
@alexalexes
Нужно сообщить браузеру, в какой кодировке будет страница, при помощи http-заголовка:
header('Content-Type: text/html; charset=utf-8');
Так как присутствия
<meta charset="utf-8" />
недостаточно, если браузер взаимодействует с php сервером.
PS:
// $lastSymmbol = substr($ar['surname'], -1);
Помните, что для utf-8, как для разновидности двухбайтовой кодировки, нужно использовать другой спектр функций mb_*, в данном случае mb_substr.
Но чтобы одни работали, нужно убедиться, что включено расширение mbstring в настройках php.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Нужно помнить, что в utf-8 каждый символ кириллицы занимает 2 байта, а не один. И использовать многобайтные функции для работы с текстом, например, mb_substr вместо substr
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы