Что такое кракозябры и как их исправить

krakozyabry-5349086

10 февраля 2020 Разное

Кракозябры — это искаженный текст, который выводится по причине не правильно установленной кодировки. Чаще всего это происходит когда русские символы в кодировке CP-1251 открываются в юникоде UTF-8.

krakozyabry1-1024x247-7167421

Лучше всего в проектах всегда использовать кодировку UTF-8, так как эта универсальная кодировка и она поддерживает большинство символов. С ней будет меньше всего проблем, а сайт будет корректно отображаться в любой точке мира.

Как бороться с кракозябрами?

Сохранять файлы в UTF-8 без BOM

Во первых исходные файлы должны быть сохранены в кодировке UTF-8 без BOM. Это значит, что текст не будет содержать пустых символов, которые могут мешать интерпретации исходного кода или отображаться на сайте в виде точек. Преобразовать тексты можно в бесплатном редакторе Notepad++ в меню Кодировки → Преобразовать в UTF-8.

krakozyabry2-1024x388-6058207

Добавлять мета-тег charset

В тегах можно указать кодировку для браузера следующим тегом:

В самом начале файла .php добавляем следующий код:

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

Указывать кодировку в файле .htaccess

Ещё один способ указать кодировку в файле .htaccess

AddDefaultCharset utf-8

Кодировка базы данных MySQL

Кодировка сайта и базы данных MySQL должны совпадать. Если это не так, то следует конвертировать базу данных в кодировку UTF-8. Следующий запрос конвертирует указанную таблицу в кодировку UTF -8:

ALTER TABLE `db_name`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Конвертируем сразу все таблицы. Этот запрос будет работать в MySQL версии 5 и выше:

SELECT CONCAT(  'ALTER TABLE `', t.`TABLE_SCHEMA` ,  '`.`', t.`TABLE_NAME` ,  '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) AS sqlcode
FROM  `information_schema`.`TABLES`
WHERE 1 
AND t.`TABLE_SCHEMA` =  'My_DB_for_convert'
ORDER BY 1 
LIMIT 0 , 90

И указать кодировку базы данных в подключении. Для этого после подключения к БД добавляем:

mysql_query("SET NAMES 'UTF8'");

В 1С-Битрикс например, кодировку базы можно указать в файле /bitrix/php_interface/after_connect.php:

$DB->Query("SET NAMES 'utf8'";);

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