Проблемы с кодировкой на сайте

Проблемы с кодировкой на сайте

Проблемы с кодировкой, когда на сайте отображаются нечитаемые символы вместо корректного содержимого, возникают из-за несовпадения кодировки файлов сайта с кодировкой, которая устанавливается настройками сервера или базы данных.

Ниже рассмотрим возможные способы устранения этих проблем.

Кодировка в запросе к базе

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

Чтобы ее устранить, необходимо добавить в файл скрипта, который содержит данные для подключения к базе данных, следующие строки:

mysql_query(«SET NAMES ‘cp1251’ COLLATE ‘cp1251_general_ci'»);mysql_query(«SET CHARACTER SET ‘cp1251′»);

Если используется mysqli:

mysqli_query($link, «SET NAMES ‘cp1251’ COLLATE ‘cp1251_general_ci'»);mysqli_query($link, «SET CHARACTER SET ‘cp1251′»);

Еще один распространенный случай — когда соединение с базой использует по умолчанию кодировку UTF-8, а файлы сайта открываются в браузере в другой кодировке. (Могут выводиться символы раняРвместо кириллицы.)

Для устранения проблемы рекомендуем указать кодировку по умолчанию в . Он располагается в папке public_html в директории вашего сайта.

Добавьте в файл строку:

При такой настройке сервер будет использовать для отображения сайта именно указанную кодировку.

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

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

Например, чтобы установить по умолчанию кодировку UTF-8, выполните следующее:

  • Выберите нужную базу в списке баз слева.
  • Перейдите в раздел Операции

Проблемы с кодировкой на сайте

  • Сравнение / Collation выберите utf8_general_ci
  • Отметьте галочками оба пункта.
  • Вперед

Проблемы с кодировкой на сайте

PHP в рамках виртуального хостинга может работать в двух режимах — mod_phpmod_cgi

  • В первом случае PHP функционирует как модуль веб-сервера Apache, поэтому настройки PHP необходимо указывать в файле .htaccess
  • Во втором случае настройки PHP необходимо указывать в файле php.ini, который располагается в директории cgi-bin вашего сайта.

По умолчанию на новых серверах PHP работает в режиме mod_php, но при желании вы можете подключить режим mod_cgi, воспользовавшись нашей

APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.

Управление APC осуществляется директивами:

php_flag apc.cache_by_default onphp_flag apc.cache_by_default off

Default_charset

Директива указывает кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц.

AddDefaultCharset cp1251php_value default_charset cp1251

Директива указывает, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.

Включение и выключение осуществляются следующим образом:

php_value display_errors 0php_value display_errors 1

Волшебные кавычки (Magic Quotes) — это процесс автоматического экранирования входящих данных PHP-скрипта. Если опция включена, то одинарные (‘) и двойные («) кавычки и обратный слэш ()экранируются обратным слэшем автоматически.

Читайте также:  Будьте впереди с экспертными услугами мониторинга хостинга

Включение и выключение magic_quotes осуществляется директивами:

php_flag magic_quotes_gpc onphp_flag magic_quotes_gpc off

Mail. add_x_header

Директива указывает, сколько входных переменных может быть принято в одном запросе. Например:

Mbstring. func_overload и mbstring. internal_encoding

Для корректной работы сайтов на старых версиях CMS Битрикс (до v20.100.0) требуются следующие параметры:

php_value mbstring.func_overload 2php_value mbstring.internal_encoding UTF-8

Opcache. revalidate_freq

Отключение OpCache (настройка требуется для CMS Битрикс):

Pcre. recursion_limit

Устанавливает лимит на рекурсию.

Post_max_size

Опция устанавливает максимально допустимый размер данных, отправляемых методом POST. Также это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.

php_value post_max_size 40M

Register_globals

Директивы для включения/выключения глобальных переменных:

php_flag register_globals onphp_flag register_globals off

Request_order

Директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.

php_value request_order GPC

Upload_max_filesize

Устанавливает максимальный размер закачиваемого файла.

php_value upload_max_filesize 30M

Настройка опций в файле php. ini

Опция включает поддержку оберток URL (URL wrappers), которые позволяют работать с объектами URL по протоколам ftp или http как с обычными файлами.

Включение опции (для отключения значение = 0):

Apc. cache_by_default

Отключение APC (для включения значение = 1):

Указание кодировки по умолчанию:

default_charset = «cp1251»

Включение вывода ошибок (для выключения значение = off).

display_errors = on

Magic_quotes_gpc

Отключение Magic Quotes (для включения значение = 1):

Изменение количества вводимых переменных:

Настройки для старых версий CMS Битрикс:

mbstring.internal_encoding = UTF-8mbstring.func_overload = 2

Отключение OpCache (настройка для CMS Битрикс):

Лимит на рекурсию:

Максимальный размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.

post_max_size = 40M

Отключение Register Globals (для включения значение = 1):

request_order = GPC

upload_max_filesize = 30M

Опции, которые не могут быть изменены

К настройкам PHP, изменение которых невозможно в рамках виртуального хостинга, относятся:

Просмотр параметров php

  • Просмотреть значения параметров php, установленных для сервера, можно на странице phpinfo: server — имя сервера, на котором расположен ваш аккаунт.
  • Для того, чтобы просмотреть значения параметров php, установленных для конкретного сайта, создайте в его директории файл info.php со следующим содержимым:

Как кодировка влияет на отображение сайта, чем отличается UTF-8 от Windows 1251 и где указать кодировку.

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

Зачем нужна кодировка

Кодировка (Charset) — способ отображения кода на экране, соответствие набора символов набору числовых значений. О ней сообщает строка Content-Type и сервер в header запросе.

Студентка списывала реферат с формулами, а на сайте слетела кодировка. Реальная история

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

Кодировка влияет на SEO?

Разберемся, как кодировка на сайте влияет на индексацию в Яндекс и Google.

Яндекс четко заявляет:

Читайте также:  53 Best Germany VPS Providers in 2021 - Uncensored Hosting Reviews

«Тип используемой на сайте кодировки не влияет на индексирование сайта. Если ваш сервер не передает в заголовке кодировку, робот Яндекса также определит ее самостоятельно».

Позиция Google такая же. Поисковики не рассматривают Charset как фактор ранжирования или сигнал для индексирования, тем не менее, она косвенно влияет на трафик и позиции.

Если кодировка сервера не совпадает с той, что указана на сайте, пользователи увидят нечитабельные символы вместо контента. На таком сайте сложно что-либо понять, так что скорее всего пользователи сбегут, а на сайте будут расти отказы.

Пример страницы со слетевшей кодировкой

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

Виды кодировок

Существует довольно много видов, но сейчас распространены два:

UTF-8

Unicode Transformation Format — универсальный стандарт кодирования, который работает с символами почти всех языков мира. Символы могут занимать от 1 до 4 байт, такое кодирование позволяет создавать мультиязычные сайты.

Есть несколько вариантов — UTF-8, 16, 32, но чаще используют восьмибитное.

Windows-1251

Этот вид занимает второе место по популярности после UTF-8. Windows-1251 — кодирование для кириллицы, созданное на базе кодировок, использовавшихся в русификаторах операционной системы Windows. В ней есть все символы, которые используются в русской типографике, кроме значка ударения. Символы занимают 1 байт.

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

Определить кодировку страницы своего или чужого сайта можно через исходный код страницы. Откройте страницу сайта, выберите «Просмотр кода страницы» (сочетание горячих клавиш Ctrl+U» в Google Chrome) и найдите упоминание «charset» внутри тега head.

На странице сайта используется кодировка UTF-8:

Указание кодировки в коде страницы

Узнать вид кодирования можно с помощью сервиса для анализа сайта. Сервис проверяет в том числе и техническую сторону ресурса: анализирует серверную информацию, определяет кодировку, проверяет редиректы и другие пункты.

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

Проверить кодировку еще можно через сервис Validator.w3, о котором писали в статье о проверке валидации кода. Нужная надпись находится внизу страницы.

Кодировка сайта в валидаторе

Если валидатор не обнаружит Charset, он покажет ошибку:

Ошибка указания кодировки

Но валидатор работает не точно: он проверяет только синтаксис разметки, поэтому может не показать ошибку, даже если кодирование указано неправильно.

Если кодировка не отображается

Если вы зашли на чужой сайт с абракадаброй, а вам все равно очень интересно почитать контент, то в Справке Google объясняют, как исправить кодирование текста через браузер.

Главное правило — для всех файлов, скриптов, баз данных сайта и сервера должна быть указана одна кодировка. Ошибка может возникнуть, если вы случайно указали на сайте разные виды кодировки.

Читайте также:  Освоение удаления Msmpeng Exe: ваше пошаговое руководство

Яндекс советует использовать одинаковую кодировку для страниц и кириллических адресов структуры. К примеру, если робот встретит ссылку data-hren=»/корзина» на странице с кодировкой UTF-8, он сохранит ее в этом же UTF-8, так что страница должна быть доступна по адресу «/%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0».

Где указать кодировку сайта

У всех таблиц, колонок, файлов, сервера и вообще всего, что связано с сайтом, должна быть одна кодировка. Нужно привести все к единому виду:

  • кодировка в мета-теге;
  • кодировка в .htaccess;
  • кодировка документа;
  • кодировка в базе данных MySQL.

Кодировка в мета-теге

Добавьте указание кодировки в head файла шаблона сайта.

При создании документа HTML укажите тег meta в начале в блоке head. Некоторые браузеры могут не распознать указание кодировки, если оно будет ниже.

Мета-тег может выглядеть так:

В HTML5 они эквивалентны.

Тег кодировки в HTML

В темах WordPress обычно тег «charset» с кодировкой указан по умолчанию, но лучше проверить.

Кодировка в файле httpd. conf

Инструкции для сервера находятся в файле httpd.conf, обычно его можно найти на пути «/usr/local/apache/conf/».

Если вам нужно сменить кодировку Windows-1251 на UTF-8, замените строчку «AddDefaultCharset windows-1251» на «AddDefaultCharset utf-8».

Осторожнее: если вы измените в файле кодировку по умолчанию, то она изменится для всех проектов на этом сервере.

Убедитесь, что сервер не передает HTTP-заголовки с конфликтующими кодировками.

Добавьте кодировку в файл .htaccess:

  • Откройте панель управления хостингом.
  • Перейдите в корневую папку сайта.
  • В файле .htaccess добавьте в самое начало код:для указания кодировки UTF-8 — AddDefaultCharset UTF-8;для указания кодировки Windows-1251 — AddDefaultCharset WINDOWS-1251.
  • для указания кодировки UTF-8 — AddDefaultCharset UTF-8;
  • для указания кодировки Windows-1251 — AddDefaultCharset WINDOWS-1251.
  • Перейдите на сайт и очистите кэш браузера.

Кодировка документа

Готовые файлы HTML важно сохранять в нужной кодировке сайта. Узнать текущую кодировку файла можно через Notepad++: откройте файл и зайдите в «Encoding». Меняется она там же: чтобы сменить кодировку на UTF-8, выберите «Convert to UTF-8 without BOOM». Нужно выбрать «без BOOM», чтобы не было пустых символов.

Выбирайте нужную кодировку сразу при создании базы данных. Распространенный вариант — «UTF-8 general ci».

Где менять кодировку у БД:

  • Кликните на раздел «Операции»:
  • Введите нужную кодировку для базы данных MySQL:
  • Перейдите на сайт и очистите кэш.

Для всех таблиц, колонок, файлов, сервера и вообще всего, что связано с сайтом, должна быть одна кодировка.

С новой БД проще, но если вы меняете кодировку у существующей базы, то у созданных таблиц и колонок заданы свои кодировки, которые тоже нужно поменять.

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

  • Подключитесь к серверу с правами mysql root пользователя:mysql -u root -p
  • Выберите нужную базу:USE имя_базы;
  • Выполните запрос:SET NAMES ‘utf8’;

Если вы хотите указать Windows-1251, то пишите не «utf-8», а «cp1251» — обозначение для кодировки Windows-1251 у MySQL.

Чтобы установить UTF-8 по умолчанию, откройте на сервере my.cnf и добавьте следующее:

Вы когда-нибудь сталкивались с проблемами кодировки на сайте?

Оцените статью
Хостинги