Php mysql utf8 знаки вопроса

Русские буквы и символы в PHP скриптах и базе данных MySQL

Проблемы с кодировкой в PHP

Follow us on Twitter Follow us on rss

При использовании локального сервера на компьютере под управлением Windows, будь то Denwer или лбой другой набор, возникает проблема с отображением русских символов и букв при выводе страницы в браузер. Причины этой проблемы могут быть разными, в данной статье я расскажу о некоторых из них и постараюсь помочь с их решением.

Обычный вывод в PHP

Если не отображаются русские символы при обычном выводе через echo, появляются знаки вопроса (?) вместо букв, то проблемой может быть неверно указанная кодировка файла. Стандартная программа блокнот Windows по умолчанию сохраняет файл в кодировке ANSI, в результате чего появляется такая проблема как на картинке.

Знаки вопроса вместо букв

Знаки вопроса вместо букв

Решить проблему можно сохранив файл в формате UTF-8, для этого в блокноте достаточно нажать Файл->Сохранить как… и в появившемся окне выбрать тип файла «Все файлы» и выбрать кодировку UTF-8. После чего нажать кнопку сохранить и подтвердить замену файла.

Читайте также:  Php fatal error output buffer

Сохранение файла в кодировке UTF-8

Сохранение файла в кодировке UTF-8

Открываем вновь в браузере и видим, что проблема решена.

Нормальное отображение символов в PHP

Нормальное отображение символов в PHP

Этот способ показан для программы Блокнот Windows, т.к. чаще всего проблема возникает именно с ней у начинающих программистов PHP. Для программирования лучше использовать специальный текстовый редактор (Sublme Text, Notepad++ и др.) или IDE PhpStorm, они по умолчанию работают UTF-8.

Ошибки с русским текстом в базе данных MySQL

Проблема проявляет себя во время сохранения данных в базе данных MySQL. Обычно это происходит из-за того, что пользователь, при создании новой базы данных и таблицы, не выбирает сравнение(кодировку) и она устанавливается по умолчанию как latin1_swedish_ci.

СУБД возвращает ошибку при попытке добавить русский текст в поле записи.

#1366 — Incorrect string value

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

Чтобы не сталкиваться с такой проблемой необходимо всегда выбирать сравнение utf8_general_ci при создании базы данных, таблиц и столбцов.

Знаки вопроса при выводе данных из базы данных MySQL

Иногда возникает проблема с отображением данных, полученных из базы данных MySQL. Обычно вместо русских символов выводятся знаки вопроса.

Проблема решается путем установления кодировки подключения к базе данных.

Если вы пользуетесь старыми функциями для работы с БД MySQL, то сразу после функций подключения к базе данных необходимо добавить:

и при этом советую вам почитать про PDO, так как библиотека для работы с БД MySQL, включающая функции mysql_connect(), mysql_select_db() и прочие уже устарела, а в версии PHP 7 вообще убрана.

Если вы работаете с PDO, то в DSN(способ соединения с БД у PDO) необходимо в параметре charset устанавливать кодировку utf8. Пример соединения с кодировкой:

$ms_host = "localhost"; // Хост $ms_db = ""; // Имя БД $charset = "utf8"; // Кодировка соединения $dsn = "mysql:host=$ms_host;dbname=$ms_db;charset=$charset";

Если ничего не помогает

Попробуйте после подключения к БД добавить mysql_query(«SET NAMES utf8»);

Попробуйте в начале PHP скрипта добавить header(‘Content-Type: text/html; charset=utf8’);

А так же не забывайте о meta-теге между и

Буду рад, если кому-нибудь помогли данные советы. Вы можете задать вопрос со своей проблемой в комментарии и мы попробуем вместе разобраться. Удачи в устранении ошибок и багов!

Для вас это может быть интересно:

Русские буквы и символы в PHP скриптах и базе данных MySQL : 2 комментария

  1. Скейли 19.10.2016 Нормально отображаться русский текст начал только после указания кодировки UTF-8(без BOM) в notepad++, хотя meta charset использовал. Почему разрабы не могут проблемы кодировкой раз и навсегда решить, указывать приходится во всех местах. 🙁
  1. KoT 08.01.2021 А я использовал кодировку UTF-8 с BOM и так же нажимал преобразовать в UTF-8 с BOM и русский текст отобразился

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  • Qt (4)
  • SEO (5)
  • Администрирование (4)
  • Алгоритмы (6)
  • Заработок (1)
  • Операционные системы (4)
  • Ответы (2)
  • Программирование (23)
  • Сайтостроительство (11)
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Di к записи Создание Excel документа на PHP (генерация .xls файлов)
  • Илья к записи Русские символы(буквы) при вводе/выводе в консоль на C++
  • LedsHack к записи Найти максимальный и минимальный элемент массива на C++

Источник

Почему вместо кириллицы знаки вопросов?

Всем привет, уже сломал голову. Залил сайт на VPS, у меня появилась проблема, что вся кириллица, что выводится из БД отображается в виде знаков вопроса без ромбиков, при этом, вся БД стоит на utf8, в пыхе тоже прописан utf-8 и у сервера тоже прописан utf-8, в чем проблема? На локалке всё работало классно, а на сервере вот такая подстава

FanatPHP

Давно пора запилить аналог вот этого ответа.
А то же ведь раз в три дня один и тот же вопрос — кракозябры, вопросики, ромбики.
И везде одна и та же ересь про «meta charset» в ответах.

Именно в варианте чеклист, чтобы каждый проверял по конкретным пунктам, в которых четко написано, что делать, вместо невнятного мычания «ну у меня там утээф и еще здесь и вот тута»

  • Кодировка, которую надо выставлять, называется utf8mb4
  • Что там стоит на «всей БД» абсолютно без разницы. Кодировка должна быть указана для таблиц (в отдельных случаях — для поля) при создании. Проверить можно командой SHOW CREATE TABLE table_name
  • Должна быть быть выставлена кодировка соединения с БД
    • в PDO через DSN $dbh = new PDO(‘mysql:host=. ;charset=utf8mb4’);
    • в mysqli $mysqli->set_charset(‘utf8mb4’);
    • Либо default_charset = «utf-8» в php.ini.
    • Либо руками в коде header(‘Content-Type: text/html; charset=utf-8’);

    Источник

    В MySQL знаки вопросов вместо русских букв — решение проблемы с кодировкой

    Знаки вопросов в MySQL вместо русских букв — исправляем проблему кодировки MySQL

    При переносе дампа или после нескольких манипуляций в базе неожиданно появились знаки вопросов в MySQL вместо русских букв? Это известная и распространённая проблема в MySQL старших версий.

    Это руководство поможет предпринять быстрые шаги в исправлении ситуации.

    Мы рассмотрим конкретные действия для быстрого решения. Обратите внимание на официальное руководство по кодировке в MySQL, чтобы вы смогли разбираться в сути и выполнять рекомендации осознанно.

    Исправляем знаки вопросов в MySQL на русские буквы

    Воспользуйтесь этими быстрыми рекомендациями, чтобы отобразить русские буквы без знаков вопросов и «крякозябр». Ниже мы привели некоторые уточнения.

    1. Дождитесь выполнения соединения с сервером
    2. Введите запрос:
      set names кодировка «кодировка» — это параметр кодировки, в которой вы выводите данные страницы на сайте.
      То есть запрос для UTF-8 должен выглядеть так:
      set names utf8 А для Windows-1251 вот так:
      set names cp1251
    3. Очень часто параметр «Set Names» не помогает решить проблему кодировке при сортировке по имени, хотя буквы отображаются нормально. Как это исправить, читайте далее.

    Обратите внимание, что запросы «set names» по факту не влияют на кодировку, которая используется функцией mysql_real_escape_string . Поэтому рекомендуется применять установку кодировки через mysql_set_charset() вместо запроса «set names». Но даже если вы проигнорируете эту рекомендацию, то для Uta8 и других однобайтных кодировок ничего плохого не последует.

    Чтобы не задавать кодировку в каждом скрипте, допишите в my.ini
    [mysqld]
    init-connect=’SET NAMES utf8′

    Исправление проблемы кодировки MySQL, если запрос SET NAMES не помог

    Перед тем, как изменить кодировку MySQL, вновь выполните запрос «Set Names», но уже с указанием кодировки таблицы (мы должны её выяснить).

    1. Причина кроется в том, что для таблиц настройка в одной кодировке, а данные в них — в другой.
    2. Попробуйте начать с простого решения — того же запроса «Set Names», но в кодировке таблицы.
    3. Для этого задайте запрос для названия вашей таблицы: show create table `table`
    4. Используйте полученную кодировку в запросе «Set Names»:
      SET NAMES кодировка
      «кодировка» — это параметр, который показал результат запроса «Show Create Table» из пункта 3 ( DEFAULT CHARSET=кодировка ).
    5. Так вы уберёте «крякозябры» и знаки вопросов из MySQL, настроите правильную отдачу и запись русских букв в данных (главное, чтобы у самой веб-страницы была соответствующая кодировка), но проблему сортировки и поиска пока не решите. Идём дальше.

    Теперь, зная кодировку таблицы (например, latin1 ) и имея данные в той же кодировке, мы должны изменить фактическую кодировку данных.

    1. Через mysqldump создайте дамп базы данных.
    2. Используйте эту команду, в которой вместо слова «кодировка» вставьте параметр, выясненный из кодировки таблицы:
      mysqldump -uUSERNAME -pPASSWORD DB_NAME —allow-keywords —create-options —complete-insert —default-character-set=кодировка —add-drop-table > dump.sql
    3. Главное не перепутать кодировку таблиц с кодировкой данных.
    4. Проверьте дамп на правильное отображение кодировки уже в формате данных таблицы, а не самой таблицы, как в пункте 3 (то есть уже не latin1 , а utf8 , например). Скопируйте бэкап дампа отдельно.
    5. В дампе найдите оператор «Create Database» и проверьте, правильная ли в нём кодировка.
    6. Если нет, то исправьте. Тоже самое можно (и лучше сделать) с оператором «Create Table».
    7. Используйте эту команду для заливки дампа, где «кодировка» — параметр данных таблицы ( utf8 , а не latin1 из нашего примера):
      mysql -uUSERNAME -pPASSWORD DB_NAME —default-character-set=utf8 < dump.sql
    8. На веб-странице сайта найдите функцию mysql_connect , затем mysql_select_db и ниже их размещения добавьте строчку, где «кодировка» — это параметр данных таблицы, а не самой таблицы:
      mysql_query(«SET NAMES кодировка»)

    Знаки вопросов в MySQL вместо русских букв — исправляем проблему кодировки MySQL

    Ничего не помогает, проблема кодировки MySQL так и осталась

    Объёмный wiki-раздел по кодировке MySQL составили белорусские коллеги, где вы можете получить исчерпывающее описание процесса правильного создания баз данных и таблиц. Ведь именно в этом процессе кроются все причины возникновения проблемы со знаками вопросов MySQL и «крякозябрами» вместо русских букв.

    Также обратите внимание и на эти моменты при работе с базами данных

    • правильная ли задана кодировка при создании таблиц (можно использовать любую, но она должна отражать кодировку данных в таблице);
    • правильная ли кодировка у скрипта, работающего с базой данных (кодировка веб-страницы и скрипта должна быть одной);
    • правильная ли кодировка у самого сайта (у веб-страницы и заголовка «Content-Type» сайта она должна быть общая);
    • в правильной ли кодировке сохраняются данные на веб-странице через редактор (выберите в редакторе нужную кодировку, следите за этим).

    Компания ZEL-Услуги

    Не хотите самостоятельно разбираться в настройке MySQL и оптимизировать работу ИТ-инфраструктуры предприятия? Передайте заботы о программном обеспечении в компанию ИТ-аутсорсинга с полноценным ИТ-аудитом и экспертной поддержкой по любым техническим вопросам и задачам.

    Читайте также

    Может быть интересно

    Источник

Оцените статью