Удаление UTF-8 BOM из консоли

linux (debian)
find путь/к/лайвстриту/ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i '1 s/^\xef\xbb\xbf//' {} \;

freebsd (7.2)
find ./ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i -e '1 s/^\xef\xbb\xbf//' {} \;

sed почему-то иногда не отрабатывает, поэтому php, find, awk, xargs:
php -r "ob_start();
passthru('find ./ -type f \( -name \'*.tpl\' -o -name \'*.php\' \) -print0 | xargs -0r awk \'/^\xEF\xBB\xBF/ {print FILENAME}{nextfile}\'');
foreach(array_filter(explode(\"\n\",ob_get_clean())) as \$f){
        echo \"remove BOM from \$f...\n\";
        file_put_contents(\$f, substr(file_get_contents(\$f), 3));
};"

Как найти BOM?

Очень часто при работе с различными CMS много неприятностей доставляет наличие BOM в сохраненных в utf-8 файлах.
Ошибка проявляется в виде сообщения:
Warning: Cannot modify header information - headers already sent by (output started at /xxxxxxxx/wp-config.php:1)

Может быть не wp-config.php, а другой файл. А может сообщения вообще не быть, если вывод предупреждений подавлен. Когда ошибка на виду, найти файл не составит проблемы. А если нет сообщения?

Для облегчения поиска файлов с BOM поможет скрипт.
1. скрипт разархивировать и залить на сервер в корневую директорию
2. в адресной строке броузера набрать ваш.сайт/find_bom.php

utf8 - кодировка по умолчанию в mysql

При добавлении следующих строк, кодировка по дефолту становится UTF-8
/etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysql]
default-character-set  =utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8