У меня есть таблица mySQL, в которой данные в одном из своих столбцов находятся на языке, отличном от английского. (Персидский), когда я вводил данные в таблицу, он отображается правильно, но когда я хочу показать данные в php-файле, он отображает как это:???? Хорошо, что я должен сделать, чтобы показать данные в правильной форме?
Поскольку я много работал с «неанглийскими» персонажами, для правильного отображения и хранения этих символов требуется несколько вещей.
В каком-то конкретном порядке (поскольку я не знаю, какая кодировка лучше всего подходит для персидского языка, я буду использовать UTF-8, если все по-другому, вы просто используете тот, который вам нужен):
Расскажите своему браузеру, какую кодировку вы используете, установив соответствующий заголовок из заголовка PHP header('Content-type: text/html; charset=utf-8');
или установите метатег в свой html следующим образом: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
В базе данных избегайте смешивать разные сортировки и кодировки в столбцах / таблицах. Я всегда устанавливаю базу данных, таблицы и столбцы в utf8_general_ci, которые для моих нужд работают все время (такие языки, как английский, немецкий, сербский, венгерский …).
Как сказал Ян, прочитайте http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html. Скорее всего, вам нужно выполнить запрос, например SET NAMES utf8
сразу после подключения к базе данных.
Все это должно обеспечить правильное отображение символов Юникода. Однако есть еще одна вещь, которая может отменить все это – веб-сервер. Apache (не знаю о других серверах) имеет директиву AddDefaultCharset. В большинстве настроек это отключено, но я столкнулся с настройками, в которых набор символов по умолчанию был установлен на latin1, таким образом, переопределяя все мои настройки кодировки. Если он установлен, он устанавливается в httpd.conf (или аналогичном файле конфигурации). Если у вас есть доступ к нему, я рекомендую установить его в положение «Выкл.». Если вы этого не сделаете, вы можете переопределить глобальное значение с помощью .htaccess, помещенного в ваш webroot, с чем-то вроде: AddDefaultCharset utf-8
Добавьте правильный заголовок содержимого:
header('Content-type: text/html; charset=utf-8');
или какую кодировку вы используете вместо UTF-8