В сайта вместо кирилица се визуализират "????????????". Какъв е проблема и как да го коригирам?

Вместо да се визуализира кирилицата на вашия сайт, се визуализират само въпросителни знаци. В phpMyAdmin кирилицата също не се вижда правилно, а се визуализира по подобен начин: Äîáðå äîøëè
Причината затова се дължи на разлика в енкодинга, който се използва в html-a, връзката към базата данни и колацията на базата данни. Решението е да се преконвертира базата данни.

Преконвертиране

За преконвертирането на базата данни може да се използва iconv. Може да се използва и на сървърите за споделен хостинг, ако разполагате със SSH достъп.
Важно: Преди да направите промени по базата данни, генерирайте архив.По този начин в случай на необходимост, може да бъде възстановена информация от акаунта.
След като се влезе с конзола, командата за преконвертиране е следната:

iconv -c -f utf8 -t latin1 /path/to/file/old.sql -o new.sql

Легенда:
-c - пропуска невалидните знаци при преконвертиране, ако са налични такива
-f - (from) енкодинг
-t - (to) енкодинг
old.sql - името на sql файла, който ще се преконвертира
-o - (output) опция за запис на резултата от преконвертирането във файл
new.sql - името на файла с преконвертираните данни
 
 
Базата данни е преконвертирана, но има още няколко действия преди да се импортне базата данни.

Определяне на енкодинга

За да можете да разберете в какъв енкодинг да преконверирате базата данни, най-лесно е да видите какъв енкодинг се използва в html-а. За целта можете да отворите сайта, след което да изберете View ->Page Source или да изберете клавишната комбинация Ctrl+U.

Преконвертиране в windows-1251

Ако в html-a използвате енкодинг windows-1251, то тогава е необходимо да го укажете и в колацията на базата данни.
Можете да отворите файла с текстов редактор.
1. В началото на SQL файла сложете: SET NAMES utf8;
2. Потърсете latin1 и ако има наличен такъв енкодинг го заместете със cp1251. По този начин ще укажете колацията на таблиците и полетата.
Изтрийте съдържанието на базата данни и импортнете преконвертирания файл. При правилно изпълнение на описаните по-горе стъпки, кирилицата на сайта би трябвало да се визуализира коректно.

Преконвертиране в UTF-8

Ако в html-a използвате енкодинг UTF-8, то тогава е необходимо да го укажете и в колацията на базата данни. При отваряне на файла в текстов редактор, уверете се, че използвате utf-8 енкодинг.
1. В началото на SQL файла сложете: SET NAMES utf8;
2. Потърсете latin1 и ако има наличен такъв енкодинг го заместете с utf8. По този начин ще укажете колацията на таблиците и полетата.
Изтрийте съдържанието на базата данни и импортнете преконвертирания файл.
Указване на енкодинг на връзката на приложенията с базата данни
На сървърите за споделен хостинг на СуперХостинг.БГ е зададена настройка по подразбиране за връзка на приложенията с базата данни да се използва енкодинг cp1251. В случая ще е необходимо да укажете енкодинг UTF-8 за връзка на приложенията. Най-често това става с добавяне на следния ред, веднага след връзката на приложението с базата данни (mysql_connect):

@mysql_query("SET NAMES 'utf8'");

При правилно изпълнение на описаните по-горе стъпки, кирилицата на сайта би трябвало да се визуализира коректно.

Намирате ли за полезно?