Получить вопросительные знаки для специальных символов после попытки нескольких вещей. Что еще я могу попробовать?

Я борюсь со специальной кодировкой символов на моем сайте. У меня есть inputполе с подключенным datalist. Заполняется datalistиз моей базы данных при загрузке страницы. Но каким-то образом я получаю эти вопросительные знаки внутри символов diamond для каждого специального символа в параметрах datalist и обычные вопросительные знаки для специальных символов языка (например, китайский). Вот что я попробовал:

  1. Исходный набор данных представляет собой csv-файл, который я включил в свою базу данных. Я проверил параметры сортировки в Notepad++, и он установлен в UTF8 без BOM .
  2. Я использую phpmyadmin для управления базами данных. Параметры сортировки подключения сервера имеют значение utf8mb4_bin . Таблица, в которой я храню данные, имеет параметры сортировки utf8_bin . И когда я импортировал данные, я обязательно использовал utf8 . Символы также правильно отображаются в phpmyadmin.
  3. В <head>разделе Мой индекс.php файл у меня также следующее <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

Но я все еще получаю эти вопросительные знаки. Что еще я мог проверить??

2 ответа

  1. Вы можете легко проверить, является ли строка, которую вы получаете из БД, допустимой utf8, используя этот фрагмент.
    Если это действительно UTF-8, то ваша проблема находится в слое презентации.

    if(mb_detect_encoding($str, 'UTF-8', true)){
    die('I\'m a valid UTF-8 string, YAY :D ');
    }

  2. Я использую phpmyadmin для управления базами данных. Параметры сортировки подключения сервера имеют значение utf8mb4_bin. Таблица, в которой я храню данные, имеет параметры сортировки utf8_bin . И когда я импортировал данные, я обязательно использовал utf8. Символы также правильно отображаются в phpmyadmin.

    Это вероятная причина, вы хотите изменить это на utf8mb4_ параметры сортировки .

    Другие точки должны использовать mb_действия PHP, такие как

    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8'); 
    

    Вверху страницы PHP. Также не забудьте установить набор символов подключения в объекте подключения базы данных:

    $this->MySQLiObjectVariable->set_charset("utf8mb4"); 
    

    set_charset справочная страница

    Что часто происходит, так это то, что в то время как хранилище MySQL установлено правильно, и выходные данные PHP установлены правильно, связь между ними устанавливается как системное значение по умолчанию, которое часто не является лучшим набором символов для данных (обычно latin1_или utf8_).

    Кроме того, обычно полезно игнорировать объявление набора символов Meta и фактически устанавливать их с прямым заголовком HTML, таким как:

    <?php
    header('Content-Type: text/html; charset=utf-8');
    

    появляясь на странице вывода перед HTML-контентом, убедитесь, что браузер получает данные в формате UTF-8.

    Также прочитайте UTF-8 полностью .