Магический символ №65279

Сначала заметил, что вверху страницы строка пустая появилась. Дальше больше: все хэдеры из переехали в , если смотреть через FireBug. Плюс символ №65279 появился. Ломал голову реально минут 30 над проблемой :D

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

Символ этот не что иное, как BOM (Byte Order Mark) который находится в начале файла с кодировкой UTF-8, и возможно некоторых других юникодных кодировок. Используется для индикации порядка байтов. Ну, чтоб показать 16-битные или 32-разрядных числа используются.

Вообще, забавная штука. Открывая файл текстовый, вы этот символ не увидите, даже если он есть.

____________________________________

Как исправить: нужно избавится от BOM. В том же Dreamweaver’у пересохранение без BOM ничего не даёт почему-то, символ остаётся. А вот пересохранив файл через Notepad++ в UTF-8 без BOM проблема решается.

  Категории: html, php
  • Ильнур

    спасибо тебе друг!пол дня мучался над сайтом друпаловским…пришлось пересохранять page.tpl.php твоим методом….

  • Владимир

    Спасибо, Вам! тоже обнаружил Firebug’ом этот символ. Сайт на друпале. Пересохранил все tpl.php шаблоны, и все стало сразу нормально!

  • http://suvitruf.ru Suvitruf

    Рад, что помогло)

  • http://www.4enki.ru/ 4enki

    А если не помогает пере сохранение файла в notepad++?

    • http://suvitruf.ru Suvitruf

      Там иногда и при сохранении глюки бывают. После того, как сохраните в формате без BOM, то откройте файл в HEX редакторе и посмотрите, есть ли там вначале этот символ. Если нет, то с ЭТИМ файлом всё в порядке.

      Но, возможно, вы в этом файле другие подключали? include директивы и прочие. Надо во всех файлах этот символ убрать.

      • http://www.4enki.ru/ 4enki

        разобрался.
        в HEX-режимне стояло что-то невнятно перед самим <?php....
        а вот с первого раза простое преобразование в utf без bom не помогло.

  • ckrocket

    спасибо за информацию)разобрался в чем моя проблема)

    • http://suvitruf.ru Suvitruf

      Не за что)

  • Алексей

    Тоже как-то боролся с этой заразой, и посколько проект был большой понадобилось автоматизировать процесс поиска.
    Результат:

    $path[] = '/path/for/project/root/*';

    echo '';
    while(count($path) != 0)
    {
    $v = array_shift($path);
    foreach(glob($v) as $item)
    {
    if (is_dir($item))
    {
    $path[] = $item . '/*';
    }
    elseif (is_file($item))
    {
    if (utf8_bom_detect ($item))
    {
    echo $item;
    echo '-------->BOM!';
    }
    echo PHP_EOL;
    }
    }
    }
    echo '';

    function utf8_bom_detect ($filename) {
    $file = @fopen($filename, "r");
    $bom = fread($file, 3);
    if ($bom != b"\xEF\xBB\xBF")
    {
    return false;
    }
    else
    {
    return true;
    }
    }

    В path[] пишете адрес корневой папки проекта с “/*” в конце.
    Запускаете – получаете список испорченных файлов.
    Успехов =).

    • Алексей

      В echo ”; сожрался тег pre

  • Холька

    Огромное спасибо, дружище! Все спецсимволы перебрала, не нашла там даже упоминания про 
    Даже и не знаю, что делали бы без тебя!

  • Алексей

    !!!!! Спасибо огроменное товарисч! Мозг уже расплавился с этой проблемой…..