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

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

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

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

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

____________________________________

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

Магический символ №65279: 12 комментариев

  1. Ильнур

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

  2. Владимир

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

    1. Suvitruf Автор записи

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

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

      1. 4enki

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

  3. Алексей

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

    $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[] пишете адрес корневой папки проекта с «/*» в конце.
    Запускаете — получаете список испорченных файлов.
    Успехов =).

  4. Холька

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

  5. Алексей

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *