Попался в руки довольно старый проект, работающий на древней кодировке windows-1251.
Владелец сайта пока против переноса на движок, что являлось бы самым правильным путем. Поэтому просто конвертируем в новую кодировку.

  1. Удаляем все лишние файлы – изображения, DOC, PDF. Оставляем только нужные форматы (.php, .html, .txt, .css, .js).
  2. Нужно убедиться, что все они в кодировке cp1251.
  3. Конвертируем кодировку.
    1. Создаем файл convert.sh со следующим содержимым:
      #!/bin/bash
      
      # Recursive file convertion windows-1251 --> utf-8
      # Place this file in the root of your site, add execute permission and run
      # Converts *.php, *.html, *.css, *.js files.
      # To add file type by extension, e.g. *.cgi, add '-o -name "*.cgi"' to the find command
      
      find ./ -name "*.php" -o -name "*.html" -o -name "*.css" -o -name "*.js"  -type f |
      while read file
      do
        echo " $file"
        mv $file $file.icv
        iconv -f WINDOWS-1251 -t UTF-8 $file.icv > $file
        rm -f $file.icv
      done
      

      Исходник

    2. Меняем права на выполнение и запускаем в нужной директории:
      chmod +x convert.sh
      ./convert.sh
      
  4. Не забываем поменять указание кодировки для браузера в HTML-коде:
    find -type f -name '*.php' -print0 | xargs -0 -P 8 sed -i -- 's/windows-1251"/UTF-8"/g'
    find -type f -name '*.htm*' -print0 | xargs -0 -P 8 sed -i -- 's/windows-1251"/UTF-8"/g'
    
  5. Проверяем получившиеся файлы на включения Р° — это буква «а» после двойного кодирования в UTF-8. Те файлы, где обнаружилась битая кодировка удаляем, чтобы они не перезаписали оригинал.

P.S. Есть более автоматизированный способ с использованием enconv (enca). О нем расскажу как-нибудь в следующий раз.