Почему браузер присваивает разную кодировку php-файлам: utf-8 кодируется в utf-8, а utf-8 без BOM — в windows-1251?
BOM придуман для явного указания того, что в данном файле содержится текст в кодировке UTF-8. BOM - это простой байтовый маркер в начале любого файла. При его скачивании браузер принимает этот маркер и понимает, что нужно использовать выбранную кодировку. Кроме этого, сам веб-сервер на этапе интерпретации файла может распознать BOM и отправить  заголовок с соответствующим charset (кодировкой).
Если BOM не указан, то все зависит от конфигурации веб-сервера и браузера. Если на сервере не настроен DefaultCharset, то данные отдаются без указания charset и распознавание кодировки полностью ложится на плечи браузера. Поэтому он пытается сканировать документ на наличие мета-тега с кодировкой и, если его нет, использует кодировку по умолчанию. Кодировка по умолчанию зависит от браузера, его настроек и операционной системы. Это ответ на вопрос - почему в разных браузерах файл может выглядеть по-разному.
Чтобы избежать подобных проблем нужно на первоначальном этапе создания проекта определиться с кодировкой по умолчанию и использовать ее повсюду. На настоящий момент стандартом де-факто является UTF-8. Используйте ее. Далее следует настроить ваш веб-сервер, чтобы он по умолчанию отдавал utf-8.
Если такая возможность отсутствует, всегда есть возможность указать мета-тег <meta charset="UTF-8">
В идеале ваше php приложение должно отдавать корректный тип контента и кодировку в виде заголовка.
И напоследок - использовать IDE, которая может правильно работать с файлами в различных кодировках. Например PHPStorm.
Перейти на PHPStorm