utf-8, Byte Order Mark и мой сайт.

  • Автор темы Автор темы LongMan
  • Дата начала Дата начала

LongMan

Guest
utf-8, Byte Order Mark и мой сайт.

Здавствуйте!
Я делаю сайт на apache+php+postgresql.

Условия:
В Postgre все данные хранятся в utf-8.
Файл сценария в utf-8.
Результирующая страница имеет строку <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.

Что происходит:
После обработки нескольких запросов к бд у мня есть строка, которая содержит html код. Если ее записать в файл все будет как и надо - html страница.
Я же делаю echo, как того и следовало ожидать. PHP почему-то добавляет BOM или utf-8 сигнатуру EF BB BF в начало файла, да притом не одну, а целых четыре.
Эксплорер проглатывает первую сигнатуру, на остальных спотыкается. Другие, например Firefox, обрабатывают все.
Смотрите сами: http://home.tltsu.ru/~longman/

Комментарий: если делать echo любой другой строки, например,
PHP:
echo "экзистенциализм";
,
такой проблемы не наблюдается.

Справка: BOM сделан, чтобы такое недоразумение, как notepad.exe понимало, что файл записан в utf-8 кодировке. Эта сигнатура вообще не нужна. Такие сигнатуры применяются только для utf-16 кодировок, потому что там есть какие-то две разновидности.

Вопрос: как отучить php писать сигнатуры utf-8.
 
>PHP почему-то добавляет BOM или utf-8 сигнатуру EF BB BF в начало файла, да
> притом не одну, а целых четыре.

PHP ничего сам магически не добавляет.
BOM добавляется твоим редактором, более конкретно - Notepad'ом.

>Вопрос: как отучить php писать сигнатуры utf-8.
Узнать у MS как отключить этот идиотизм в Notepad.
 
Повторяю.
После обработки нескольких запросов к бд у мня есть строка, которая содержит html код. Если ее записать в файл все будет как и надо - html страница. Без BOM.

Мой редактор эту чушь не пишет.
Notepad никогда не использовал.
 
>Если ее записать в файл все будет как и надо - html страница. Без BOM.

значит, PHP ничего не добавляет, как видишь.
 
При записи в файл ничего, согласен.
Меня echo волнует.
То что гадит апач или постгрес исключено.
 
если он там есть, значит он там есть.
могу тебя заверить, что PHP ничего не делает с выводимыми данными, если его не просят.
 
Мне вот и интересно - возможно ли такое, что он настроен так, что пишет эти сигнатуры?
 
Ищи BOM в своих скриптах, а не в том, что PHP выводит в файл.
 
Смотри подключаемые скрипты (include). Наверняка в них-то и поселились ВОМы.
 
Уважаемые camka, SiMM и tony2001.
Проблема действительно состояла в инклуженных файлах. Эта мысль мне пришла сегодня в душе.
Большое вам спасибо.

С уважением, Longan.
 
Сверху