Попался в руки довольно старый проект, работающий на древней кодировке windows-1251.
Владелец сайта пока против переноса на движок, что являлось бы самым правильным путем. Поэтому просто конвертируем в новую кодировку.
- Удаляем все лишние файлы – изображения, DOC, PDF. Оставляем только нужные форматы (.php, .html, .txt, .css, .js).
- Нужно убедиться, что все они в кодировке cp1251.
- Конвертируем кодировку.
- Создаем файл
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
- Меняем права на выполнение и запускаем в нужной директории:
chmod +x convert.sh ./convert.sh
- Создаем файл
- Не забываем поменять указание кодировки для браузера в 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'
- Проверяем получившиеся файлы на включения
Р°
— это буква «а» после двойного кодирования в UTF-8. Те файлы, где обнаружилась битая кодировка удаляем, чтобы они не перезаписали оригинал.
P.S. Есть более автоматизированный способ с использованием enconv (enca). О нем расскажу как-нибудь в следующий раз.