Когда я только начинал изучать тему разработки сайтов, кракозябры были одной из моих постоянных проблем. Создал HTML-страницу — в браузере кракозябры, установил денвер и попробовал создать сайт на PHP — снова вместо букв кракозябры. Скачал иностранную тему, подключился к базе данных — та же проблема.
На своих сайтах я обычно использую UTF-8 (это такая кодировка текста, она ещё называется юникод), соответственно она будет присутствовать во всех примерах в этой статье.
Начнём с самой простой проблемы. Вы создали какой-то HTML-файл, открыли его в браузере и получили:
Проблема актуальна в основном для пользователей Windows, на маке я с таким ни разу не сталкивался.
Решение проблемы зависит в основном от того, каким редактором вы пользуетесь. Для пользователей Windows я рекомендую бесплатный офигительный Notepad++.
Значит, открываем файл в Notepad++ и переходим в Кодировки > Преобразовать в UTF-8 без BOM. Вопрос — почему без BOM? Потому что с BOM у вас будут постоянно вставляться пустые символы (на самом деле они не пустые, у них тоже есть своя функция, но нам она в данном случае не нужна) куда не надо, а для PHP это уже критично.
Если вы сделали то, что я описывал в предыдущем шаге и ваша проблема не разрешилась, тогда самое время испробовать второй метод устранения кракозябров.
Всё, что нам требуется, это вставить следующий код между тегами <head>
сайта. Прежде всего проверьте, возможно этот метатег у вас уже присутствует. Если да, то посмотрите какое у него стоит значение параметра charset.
<meta charset="UTF-8" />
В темах WordPress обычно этот тег уже имеется по умолчанию и выглядит следующим образом:
<meta charset="<?php bloginfo('charset'); ?>" />
Если русские буквы до сих пор отображаются кракозябрами, тогда открываем ваш .htaccess
, который лежит в корне сайта и вставляем туда с новой строки это:
AddDefaultCharset utf-8
Ещё один способ определения кодировки. На этот раз через PHP. На WordPress никогда не приходилось им пользоваться.
header('Content-Type: text/html; charset=utf-8');
Важно! Этот код должен вставляться до того, как будет что-либо выведено на странице сайта, иначе — ошибка.
На многих сайтах встречаются блоки с популярными записями, последними комментариями, отзывами и так далее. Обычно в таких обзорных блоках выводится часть записи/комментария/отзыва и кнопка «читать далее». Так вот, для того, чтобы вывести первые несколько предложений или первые несколько слов текста, используется функция PHP substr()
. Конечно же в основном я имею ввиду англоязычные темы, которых так много в интернете. Даже если у этих тем есть локализация — то есть вроде бы она на русском — переведена админка, переведён практически весь сайт, но при этом мы встречаем такие вот косяки:
Как решить эту проблему?
Легко — всё что нам нужно, это найти функцию substr()
в коде и поменять её на mb_substr()
.
Если после этого у вас полезут ошибки на сайт, то скорее всего multibyte-функции не поддерживаются вашим хостингом, первое, что вам следует сделать, это написать в супорт и спросить, нельзя ли их подключить на ваш аккаунт. Если нет, меняем хостинг, например на тот, которым пользуюсь я.
У меня не раз бывало такое, что я подключался к MySQL, вытаскивал какие-нибудь данные, и при их выводе на сайте, текст отображался кракозябрами.
Такое может произойти, если кодировка вашего сайта не совпадает с кодировкой базы данных, к которой вы подключаетесь. В WordPress обычно таких проблем не бывает.
Для того, чтобы исправить это, после подключения к БД, делаем следующее:
mysql_query("SET NAMES 'UTF8'");
Если ни один из вышеперечисленных методов вам не помог, оставляйте комментарий и попробуем вместе разобраться.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Спасибо! статья помогла мне.
Спасибо помогло писал код в PHPDesigner проблему решил по умолчанию файл был создан в кодировке ANSI поменял на UTF-8 без BOM (Проблема в списке 1) заработало.
Благодарю! Использовала .htaccess
Спасибо за подсказку насчет "Кодировки > Преобразовать в UTF-8 без BOM". Никак не мог понять откуда берутся пустые символы.
Если установить WP для тестов на локальную машину (Windows) и включить отладку:
То можно получить такие же кракозяблы как в первом рисунке по всему сайту и вывод такой надписи (любая тема, в моём случае classic):
К удивлению, это не всегда. То есть поставишь чистый WP для тестов и всё нормально, как ни крути. А бывает вот такое :-)
По идее должно помочь:
Не катит?
Проблема проявляется редко. Сейчас пока её нет, как я появится - попробую твой способ, спасибо. Это ж в htaccess вписывается?
Да, верно.
Здравствуйте. Помогите, пожалуйста по следующему вопросу. Функции substr() нету, что делать? Как убрать этот вопросительный знак?
Нашел, в дужках просто был текст, а я искал через поиск, по этому и не искалось)
Здравствуйте!
В первую очередь хотел сказать спасибо за статью! За разнообразность решения одной проблемы :)
Но, к сожалению, я так и не смог решить проблему. Помогите, пожалуйста:
Создал локальный сайт через Денвер. БД следующая:
База данных: ut8_general_ci
Language: russian (ru-utf-8)
Сопоставление соединения с MySQL: ut8_general_ci
Уже где только можно и нельзя поставил кодировку UTF8.
На всякий случай в .htaccess прописал AddDefaultCharset utf-8
Дело, собственно говоря в чем. Установил плагин Page Builder, добавляю строку, виджет, все нормально. Но если "Переключится на обычный редактор", то там и видно следующее:
Это первая проблема. Кракозябра присутствует.
Вторая: я обрез статью, и в конце появился знако вопроса �
Помогите, пожалуйста.
Здравствуйте!
1) тут нужно смотреть, сходу трудно сказать
2) а каким образом обрезаете статью?
Благодарю ! Помогло !
Здравствуйте. Недавно перенёс блог с опен-сервера на хостинг. У меня в таблицах БД код utf_general_ci, на хостинге unicode. Менял в пчпмайадмин на юникод, не помогло, вставил по вашему совету в htasess, тоже, а куда вставить не понял). Пробовал еще файл конфиг преобразовать ютф без бом, не работает..
а куда вставить mysql_query("SET NAMES 'UTF8'"); не понял).
Здравствуйте!
А проблема собственно какая?
перенеся блог, выходят кракозябры.. кодировку как ни менял, ничего не получается)
А что делать если кракозябры исходят от плагина. Сейчас поясню: есть плагин регистрации. В нем есть настройка какие сообщения отправлять регистрирующемуся на почту. Они на английском. Когда изменяешь текст на свой, на русском языке на почту регистрирующемуся приходит письмо с кракозябрами. Ставишь английские буквы в сообщение - на почту приходят на английском. Где и как это можно исправить, помогите, подскажите пожалуйста?
Нужно посмотреть, каким образом он это отправляет. Если через
wp_mail()
, то таких проблем быть не должно, а если через простоmail()
, то возможно потребуется добавить параметры кодировки письма.А как это можно посмотреть? нужно будет найти файл такой и именно туда добавить?
А, да, забыл, он ведь еще до отправки эти кракозябры показывает. Весь плагин сам на русский нормально перевелся. Только вот эта часть, где вводишь какие сообщения будут приходить на почту, показывает кракозябры. Ну и соответственно их и отсылает на ящик
Да? Это уже другой разговор :)
но на этом моменте нужно подробнее.
Плагин был весь на английском. Я его перевел на русский. Единственная часть которая не переводится, это там где заполняешь какой текст уведомления будет приходить подписчику. Т.е. например: человек заполнил форму, нажал "Отправить" показывается сообщение о том, что заявка отправлена, скоро на почту придет письмо, И одновременно приходит сообщение на ящик что заявка в данный момент находится на рассмотрении.
Так вот в плагине, эти сообщения в настройках стоят стандартные на английском, их можно менять на свои. Если пишешь свои сообщения, на английском, то всё отображается нормальными английскими буквами. Но как только пишешь на русском и сохраняешь, прямо там же, где эти сообщения задаются, вместо русских букв становятся кракозябры. Соответственно что в этих окошках появляется, то он и отправляет. Эх, скриншот бы отправить, сразу думаю так сразу всё ясно станет
Ну плагин косячный, нужно смотреть код и править, что еще тут скажешь.
о, вот какой, какой, а уж этот плагин очень грамотно сделан, просто заточен не под русскоязычную аудиторию, жалко что русскоязычных таких плагинов среди бесплатных нет. Ну, ладно, как бы то ни было, спасибо большое, за подсказки.
Привет. Я создавал страничку nopead++ с кодировкой в UTF-8 без BOM и прописывал , но когда загрузил на сервер сайт он получился весь в этих кракозябрах, много уже полазил и ничего не нашел, помогите ребята)))
Привет, если ни один из перечисленных способов не помог, можете написать мне по емайл, я гляну :)
Спасибо! Помогло
У меня вот появляются после выставления текста через редактор такая кракозябра
как ее можно убрать?
Это пробел :)
да, это то понятно)
просто в редакторе его нет, а в коде странице при просмотре элемента - есть.
Он на SEO не влияет?
Не влияет.
Thanks ;-)
Моя проблема касается кодировок в MySQL. Почему-то русские буквы записываются в базу в виде цуаываыаыва вместо слова Корова, например.
В базе везде стоит кодировка utf8_general_ci.
В php файле есть:
В самом php-файле нет никаких русских букв. Собственно значения c русскими буквами берутся из $_POST, куда они попадают из поля TEXTAREA.
Вывожу значение переменной $sql на экран через echo: INSERT INTO `table` (`request`) VALUES ("Корова").
Захожу в базу - там записалось цуаываыаыва.
Если через phpMyAdmin добавлять новую запись в таблицу, то все в порядке, записывается и потом отображается Корова русскими буквами.
Ситуация одинаковая что на локальном сервере (MAMP), что на хостинге.
Уже всю голову сломал, не могу понять, почему такого рода краказябры сохраняются в таблицу вместо русских букв. Буду рад любым подсказкам, в каком направлении можно еще покопать.
Добрый день!
Можете скинуть по емайл мне доступ к хостингу? я поколдую немного, а то так что-то трудно сказать.
Нет, доступ к хостингу я не дам. Ничего там колдовать не нужно, оказывается. Довольно простую ошибку я нашел в своем же коде, который приводил выше. Если будут еще какие вопросы, буду обращаться.
Ок, отлично!
Спасибо, человечище!
В .htaccess стоит
вот это помогло
<meta charset="UTF-8" />
Спасибо, добрый человек! :3
Хочу выразить огромную благодарность человеку написавшему эту статью , эту проблему не мог решить чел который меня учит а я сам наше вашу статью и решил СПАСИБО
Очень рад, что вам помогла эта статья!
Спасибо большое за UTF, добавить bom и .ini начали отображаться нормально!
Здравствуйте. Хьюстон ,у меня проблемы.
Натянул сайт на вордпресс.
На сайте есть кусок кода ,
после этого все это выводится в тегах . До натяжки на вордпресс все работало и локально на компе, и на хостинге. Теперь все в кракозяблах вида
Исполнитель: �ࠡ Трек: ��������� ����ࠢ����� Стиль: Rap, ����ࠢ�����
Пробовал и .htaccess и header('Content-Type: text/html; charset=utf-8'); Все равно та же хрень. Что делать?
Здравствуйте, с таким пока не сталкивался, сорри
Добрый день, Миша.
Имею старый сайт, в котором записано на каждой странице:
Вроде все всегда и везде отображалось правильно, но в какой-то момент я заметил, что если адрес любой страницы сайта скопировать и вставить, например, в WhatsApp, то title и description сайта разворачиваются там не русскими буквами, а значками ����. Точно так же title и description сайта стал записываться и на сайтах анализа статистики, например, в https://be1.ru/.
Вопрос - почему это и как устранить?
Просто замена на charset=utf-8, вместе с игрой в .htaccess (добавление/убирание DefaultLanguage ru и AddDefaultCharset windows-1251 или utf-8) либо ничего не меняет, либо приводит к замене букв на значки ���� уже и в браузере.
Заранее благодарен за помощь.
Неправильно указал код, извиняюсь. На каждой странице сайта написано в meta: charset=windows-1251
Храни вас господь!)) на втором шаге действительно решилась проблема. Я человек далекий от написания кода но пришлось начать постигать азы. Еще раз большое спасибо.
Рад помочь🙏😌