За последние 24 часа нас посетили 34289 программистов и 1750 роботов. Сейчас ищут 997 программистов ...

Неправильно настроена кодировка или иероглифы

Тема в разделе "PHP для новичков", создана пользователем eanautt, 12 июл 2017.

  1. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    У меня неправильно отображаются буквы кириллицы, в частности русского алфавита.
    Файлы с кодом php имеют кодировку UTF-8 без BOM (так как используется функция
    PHP:
    1. <?php session_start();?>
    , иначе файл отсылает (если просто UTF-8) спец символы и ф-ия выдаёт ошибку: "Заголовки уже отправлены - поздняк метаться".

    Сам файл передаёт кодировку
    HTML:
    1. <meta charset="utf-8">
    В базе данных текст хранится в кодировке utf8mb4_unicode_ci

    Но при выводе этих значений выводится следующее:

    см. вложенный скрин

    Что можно поменять или добавить или убрать, чтобы вместо "иероглифов" были нормальные русские буквы?
     

    Вложения:

    • Untitled.png
      Untitled.png
      Размер файла:
      212,4 КБ
      Просмотров:
      9
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Как устанавливаете подключение к БД? Там тоже надо указать кодировку.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    .htaccess

    AddDefaultCharset UTF-8
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    utf8_general_ci
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не-не
    utf8mb4 правильнее, чем utf8
    У меня были обрезания и глюки на emoji на utf8_*. Нагуглил, что надо юзать utf8mb4 для правильного utf :D
    так-то
     
  6. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    PHP:
    1. $connection = mysqli_connect("127.0.0.1", "root", "", "aetube_db");
     
  7. eanautt

    eanautt Новичок

    С нами с:
    10 июл 2017
    Сообщения:
    27
    Симпатии:
    0
    Я добавил в код и получилось
    PHP:
    1. if (!mysqli_set_charset($connection, "utf8")) {
    2.     printf("Ошибка при загрузке набора символов utf8: %s\n", mysqli_error($connection));
    3.     exit();
    4. } else {
    5.     printf("Текущий набор символов: %s\n", mysqli_character_set_name($connection));
    6. }
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чтобы кракозябр не было, нужно чтобы кодировка одинаковая была везде:
    1. на странице, на которой набирается текст
    2. при подключении к бд при записи
    3. в самом поле в таблице в бд
    4. при подключении к бд при чтении
    5. при выводе на страницу
    6. в заголовках сервера при ответе на запрос браузера
    7. на самой странице при попадании в браузер не должно быть обозначено другой кодировки, т.е. тут тоже надо опять продублировать
    8. в браузере не должна быть выставлена принудительно другая кодировка

    во тогда да, норм, точняк всё будет хорошо

    т.е. очевидно, что тут много где можно налажать :D но выглядеть будет одинаково
     
  9. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    да)) я тоже сейчас перешел на utf8mb4)) иначе надо костыли делать для emoji
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @igordata, 3й пункт необязательный, если 2 и 4 выполнены
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, на следующий день будет вопрос "почему у меня кракозябры в PMA или при дампе" :D
     
  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    При записи китайских иероглифов в кириллицу будут кракозябры. Но при извлечении корректно записанных данных достаточно SET NAMES