Задать вопрос

Почему браузер присваивает разную кодировку php-файлам: utf-8 кодируется в utf-8, а utf-8 без BOM — в windows-1251?

Добрый день!
Вопрос 1. Файл php в кодировке utf-8 отображается в браузере нормально в кодировке utf-8, а при кодировке этого же файла utf-8 без BOM кодировка в браузере становится windows-1251 и кириллица отображается кракозябрами. Я уже читал ответы на подобный вопрос, решения типа Header("Content-Type: text/html;charset=UTF-8") или перекодировать в Notepad++ или создать файл в правильной кодировке - не подходят. Вопрос в том, ПОЧЕМУ один и тот же файл, созданный в utf-8 браузер отображает в utf-8, а в utf-8 без BOM - в windows-1251 и как этого избежать
Вопрос 2. В Dreamweaver в настройках новый файл php создается без галочки "Включить подпись Unicod (BOM)" т.е. без BOM, а если зайти в этот файл через Изменить-Свойства страницы-Название/Кодировка, то галочка "Включить подпись Unicod (BOM)" все равно будет стоять - почему и как бороться.
Заранее благодарен за помощь.
  • Вопрос задан
  • 1358 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
zoonman
@zoonman
⋆⋆⋆⋆⋆
BOM придуман для явного указания того, что в данном файле содержится текст в кодировке UTF-8. BOM - это простой байтовый маркер в начале любого файла. При его скачивании браузер принимает этот маркер и понимает, что нужно использовать выбранную кодировку. Кроме этого, сам веб-сервер на этапе интерпретации файла может распознать BOM и отправить заголовок с соответствующим charset (кодировкой).
Если BOM не указан, то все зависит от конфигурации веб-сервера и браузера. Если на сервере не настроен DefaultCharset, то данные отдаются без указания charset и распознавание кодировки полностью ложится на плечи браузера. Поэтому он пытается сканировать документ на наличие мета-тега с кодировкой и, если его нет, использует кодировку по умолчанию. Кодировка по умолчанию зависит от браузера, его настроек и операционной системы. Это ответ на вопрос - почему в разных браузерах файл может выглядеть по-разному.

Чтобы избежать подобных проблем нужно на первоначальном этапе создания проекта определиться с кодировкой по умолчанию и использовать ее повсюду. На настоящий момент стандартом де-факто является UTF-8. Используйте ее. Далее следует настроить ваш веб-сервер, чтобы он по умолчанию отдавал utf-8.
Если такая возможность отсутствует, всегда есть возможность указать мета-тег
<meta charset="UTF-8">
В идеале ваше php приложение должно отдавать корректный тип контента и кодировку в виде заголовка.
И напоследок - использовать IDE, которая может правильно работать с файлами в различных кодировках. Например PHPStorm.
Ответ написан
sivabur
@sivabur
Заблокировали просто так!
Перейти на PHPStorm
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы