Почему браузер присваивает разную кодировку 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)" все равно будет стоять - почему и как бороться.
Заранее благодарен за помощь.
  • Вопрос задан
  • 1331 просмотр
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект