За последние 24 часа нас посетили 20157 программистов и 1693 робота. Сейчас ищут 1860 программистов ...

Кириллица отображается неправильными символами

Тема в разделе "MySQL", создана пользователем Валерий Е, 16 авг 2017.

  1. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте! Прошу помощи!
    На OpenServer все работало правильно. Как установил сайт на хостинг появились непонятные символы в базе данных от кириллицы. Латиница работает правильно.
    Проблема в базе данных. В таблицу базы данные на кириллице ( логин, имя, фамилия) записываются непонятными символами. Например, "Администратор" записывается "Администратор". Поэтому в дальнейшем неправильно обрабатывается скриптом. В браузере эти записи отображаются корректно, а скриптом обрабатываются неправильно.
    Поддержка хостинга не может помочь. Было предложение
    "В скрипте которым добавляется текст не в той кодировке, после соединения с базой данных, установите правильную кодировку соединения. Информация https://php.ru/manual/function.mysql-set-charset.html"
    Мне непонятно, почему на OpenServer соединение с базой данных работает, а на хостинге это же соединение с базой данных не работает? На OpenServer база данных настроена не правильно?
    Но я выполнил, и это не помогло.
    PHP:
    1. function regUser($family, $name, $login, $email, $password, $photo)
    2. {
    3. $mysqli = connectDb();
    4. mysqli_set_charset( 'utf-8', $mysqli); // добавил это расширение
    5. $result = $mysqli->query("INSERT INTO ......;
    6. closeDb($mysqli);
    7. return $result == true;
    8. }
    Потом предложили
    PHP:
    1. mysqli_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $mysqli);
    2. вместо mysqli_set_charset( 'utf-8', $mysqli);
    И это не помогло.
    В корне сайта .htaccess с директивой AddDefaultCharsetUTF-8. На файлах установлена UTF-8. В head:
    HTML:
    1. <meta charset="UTF-8">
    Помогите, пожалуйста, решить проблему.
    Последняя помощь от поддержки:
    Наймите специалиста, чтобы он отладил скрипт.
    Глобальные настройки mysql на хостинге нельзя поменять, есть и другие пользователи, которые работают.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    таблица в какой кодировке? не база
     
  3. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    utf-8 general-ci
     
  4. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Разобрался. Помогло
    PHP:
    1. $mysqli->query("SET NAMES 'utf8'");
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Так лучше не делать. Вот так правильнее:
    PHP:
    1. $mysqli->set_charset("utf8");
     
    Валерий Е и MouseZver нравится это.
  6. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    я так и делал. это не помогло решить проблему
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Значит делали неправильно. Либо проблема не тут и достаточно было просто выставить header() с указанием кодировки.
     
  8. retvizan

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

    С нами с:
    27 дек 2013
    Сообщения:
    68
    Симпатии:
    22
    почему так правильней?
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Потому что в таком случае ты указываешь mysql кодировку соединения напрямую через драйвер БД. В противном же случае ты посылаешь запрос к БД, в котором указана кодировка, в которой она должна понимать запросы... Это бред того же времени, что выставления кодировки на странице через <meta>. Это не работает, это прокатывает.
     
    Валерий Е нравится это.