Удаление из UTF8 BOM php-скриптом

Удаление из UTF8 BOM php-скриптом

Столкнулся с интересной ошибкой, страница панели управления сайта на CMS MODX стала время от времени отображаться некорректно, вместо страницы на все окно браузера растягивалось меню панели управления MODX.

Долго не мог найти причину ошибки, в консоли браузера не показывалось никаких ошибок, а верстка рушилась, после обновления страница могла корректно отобразиться, то есть ошибка повторялась не постоянно.

Потратив несколько часов на проверку и случайно заметил, что в панели разработчика (f12) в коде страницы в самом её начале выделяется пустой символ, при выборе «Edit as HTML» пустой символ превращался в



Оказалось, причина в кодировке файлов, часть файлов по какой-то причине были в UTF8 c BOM, в основном это были файлы дополнения poll, оно реализует функции голосования для MODX.

Для массовой чистки от BOM воспользовался php скриптом:

read()) {
        if ($file != "." and $file != "..") {
            if (filetype($sHOME . $win32 . $file) == "dir") {
                $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
            } else {
                $content = file_get_contents($sHOME . $win32 . $file);
                $BOM = SearchBOM($content);
                if ($BOM) {
                    $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
                    // Удаляет 3 символа из начала файла
                    $content = substr($content, 3);
                    // Результат записывает в исходный файл
                    file_put_contents($sHOME . $win32 . $file, $content);
                }
            }
        }
    }
    $folder->close();
    if (count($foundfolders) > 0) {
        foreach ($foundfolders as $folder) {
            RecursiveFolder($folder, $win32);
        }
    }
}

// Поиск BOM в файле
function SearchBOM($string)
{
    if (substr($string, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) return true;
    return false;
}

?>



    
    Поиск и удаление UTF8 BOM


\n"; } if (!empty($list)) { ?>

BOM был найден в:

BOM не найден

Достаточно загрузить файл с эти скриптом в корневую директорию и запустить его.

Комментарии ()

  1. Артем 29 июня 2017, 16:06 # 0
    После чистки сайта от вируса его верстка расползалась, прошелся этим скриптом и офигел, почти 1000 файлов с BOM меткой. Вся верстка теперь на месте. Кто бы мог подумать, что все проблемы из-за одного символа. Спасибо!
    1. henmi 17 марта 2022, 07:57 # 0
      Спасибо! Помогло.