Как перекодировать сайт с utf 8 в windows 1251
Как перекодировать 1251 в UTF-8
Возникла задача перекодировать файлы сайта в формат UTF-8, а до этого данные файлы были созданы в кодировке WINDOWS-1251.
Вроде бы задача тривиальная — берем любой кодировщик и кодируем из widows-1251 в utf-8, но не тут то было, так можно делать если у нас десяток файлов.
А если файлов тысяча? Да и еще не скопом, а каждая группа в своей подкатегории!
Сразу в голову приходит идея — берем пакетный перекодировщик файлов и кодируем одним мановением мыши.
Кстати хочу заметить файлы у меня лежали на виртуальном сервере, и диск с файлами был подключен как обычный сетевой диск. Т.е. без всяких фтп и прочего, хотя конечно все это есть.
И так, необходим конвертер для пакетной кодировки в UTF.
И пакетной по-настоящему, а не выбрали кучу файлов и кодируем, чтобы можно было добавлять начальную директорию, а файлы кодировались рекурсивно.
После тщательных поисков было найдено решение!
Есть замечательный бесплатный конвертер для пакетного конвертирования в UTF — UTFCast Express — скачать конвертер UTFCast Express.
Он позволяет легко и быстро в автоматическом режиме перекодировать каталог и все файлы в подкаталогах. Но у него есть небольшая особенность! Так как версия Экспресс бесплатная — то она не имеет опции конвертировать в UTF-8 без BOM (BOM — Byte Order Mark, служит для идентификации кодировок UTF)
Недостаток результата конвертирования такой, что ваши PHP скрипты скорее всего не будут работать! А вот для решения этой проблемы необходимо применить вторую программку — скачать utf8-bom-remover.exe — UTF-8 BOM Remover
Эта тоже замечательная программа — прекрасно справляется с удалением BOM в UTF файлах. А главное рекурсивно все содержимое каталога и подкаталогов!
Вот такой связкой можно решить такой важный вопрос.
До этого я пересмотрел программы:
Smart Recoder 1.6.2b — не работает с UTF-8
TEA 26.2.0, TEA 27.0.1 — крутой редактор, но я не понял как его можно применить для этих целей, хотя некоторые пишут что можно
Encoding Master 1.63 — можете попробовать, но при добавлении моей директории он подвисал
Notepad++ (NPP) — классный, гибкий редактор, но как таковой рекурсивной простой и удобной перекодировки нет, но можно легко убирать BOM
AkelPad — можно вручную сохранять в UTF-8 без BOM
коммандер FAR с плагином FarTrans — при обработке 1010 файлов php плагин вылетал в течении 3-х секунд, пробовал несколько раз
Ansi2Uni — классный маленький конвертер, но с несовсем рекурсией
Russian Anywhere 4.62 — навороченный конвертер, но как-то не пошел
Kaboom — вроде было все что нужно, вот только с рекурсией не удалось
UTF8_convert — минимум кнопок, но нет возможности выключать BOM
ABConverter — не работает с UTF
Если есть желание и возможности заплатить 30$, то рекомендую купить платную версию UTFCast Professional очень мощный, гибкий и удобный конвертер (по крайней мере мне так показалось)
Конвертация сайта из Windows-1251 в UTF-8
Преимущества кодировки UTF-8
Кодировка Windows-1251 может содержать не более 255 символов, так как все символы этой кодировки кодируются одним байтом. Из-за этой особенности, такие кодировки, как win-1251 еще называют «однобайтными». В состав Windows-1251 входят символы кириллического, латинского алфавитов, знаки препинания и некоторые другие символы. Из-за столь ограниченного набора символов, вывести в Windows 1251 символы китайского иероглифа (供) или, например, немецкого умляута (ö) невозможно.
Можно предположить, как делают множество создателей кириллических сайтов, что для проектов, на которых будут использоваться только кириллица или латинские символы кодировка utf-8 ни к чему. Еще больше, в приоритете использования Windows-1251 может убедить тот факт, что символы этой кодировки занимают меньше места, и в следствие чего немного быстрее обрабатываются строковыми функциями PHP.
Кодировка UTF-8 имеет настолько больше преимуществ, что увеличенный размер её символов перестает играть значимую роль и превращается в одни плюсы. В utf-8 хранится огромный набор знаков, иероглифов и букв различных алфавитов, включая и кириллические, в связи с чем русскоязычный сайт в кодировке utf-8 корректно отобразиться на компьютерах в Японии, арабских и других стран, которые даже не подозревают о существовании кодировки win-1251 и других однобайтных кодировок (KOI8-R, CP866, ISO 8859-5 и др.) с поддержкой кириллических символов.
Перекодирование сайта в UTF-8
Далее будут рассмотрены способы, как подружить строковые функции PHP с кодировкой UTF-8.
Редактирование скриптов в кодировке UTF-8
Конвертация данных в MySQL
$mysqlhost = » ;
$mysqlusers = » ;
$mysqlpass = » ;
$dbname = » ;
// Скрипт проверки кодировок
// http://petrenco.com/php.php?txt=142
‘ ;
>
>
else
<
$columns = ‘ Кодировка столбцов равна кодировке таблицы ‘ ;
>
Таблицы не соответствующие кодировке соединения
или выведя заголовок непосредственно средствами PHP:
Эти два способа указания кодировки браузеру можно совместить.
Теперь, вся информация из БД будет выводиться на страницах сайта как положено, а вот все тексты не латинскими буквами, расположенные в скриптах, отобразятся «кракозяблами». Для превращения «кракозяблов» в нормальный текст необходимо перекодировать уже сами скрипты, о чем речь пойдет в следующем разделе.
Перекодировка скриптов из Windows-1251 в UTF-8
// Конвертер модуля ссылок
Кодировка файлов
О превосходстве кодировки utf-8 над windows-1251 я уже слышал давно, но не предавал этому значения, так как проблем с отображением текста web страниц ни когда не возникало.
Вернее, проблемы-то были, но они всегда решались одним из трёх верных способов, о которых и пойдёт речь.
Кодировка utf-8
UTF-8 (от англ. Unicode Transformation Format — формат преобразования Юникода) — в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста. Нашла широкое применение в операционных системах и веб пространстве. В Unicode насчитывается свыше 100 000 символов.
Кодировка Windows-1251 (синоним CP1251)
Отличие кодировок
Перекодировка файлов в utf-8 в три шага
Для того, что бы сменить кодировку страницы, необходимо открыть файл в Adobe Dreamweaver и в окне «свойства страницы» установить нужную кодировку и нажать OK.
Ни каких галочек BOM ставить не надо.
Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа,
сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто
называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут
автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой
могут некорректно обрабатываться старыми программами, в частности xml-анализаторами.
Можно так же использовать текстовый редактор NotePad++,
Dreamweaver это делает автоматически.
В ручную с помощью вышеупомянутых программ перекодировать все файлы отнимет уйму времени. Да и выполнять однообразную работу по смене кодировки в html- файлах вряд ли кому-то доставит удовольствие.
Думаю, с этой проблемой сталкиваются многие начинающие web мастера (скажу честно, я не исключение). Поэтому и выкладываю решение данной задачи.
Меняем кодировку текста у всех HTML файлов в одной директории (папке).
Затем отправляем этот файл на сервер в ту папку, где находятся HTML страницы в кодировке Windows-1251
Теперь остаётся только открыть файл «recode.php» в любом удобном для вас браузере и нажать кнопку.
А в конфигурационный файл «.htaccess» пропишется кодировка по умолчанию UTF-8.
Хочу заметить, что это всё возможно только при поддержке сервером технологии PHP.
И сохранить файл в корневой директории (там же где и index).
.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache,
а также подобных ему серверов. Позволяет задавать большое количество дополнительных
параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких
как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения
главного конфигурационного файла.
Если после выполнения этих шагов по решению проблем с кодировкой текста на Ваших страницах не исчезнут кракозябры, то не стесняясь, обращайтесь в техподдержку хостера.
Recode и enconv: как перекодировать файлы в UTF-8 из windows-1251, koi-8 и других
В общем случае, перекодировать можно в любом направлении, не обязательно именно в utf-8. Можно перекодировать между кириллическими кодировками, например, из koi-8 в cp1251, из utf-8 в koi-8, из utf-8 в cp1251 и обратно. Также рассмотрим ситуацию когда нужно изменить кодировку файлов не только в текущей директории, но и во вложенных.
В Linux перекодировку файлов удобно делать утилитами recode или enconv. Есть и другие перекодировщики, но про них пусть кто-то другой напишет.
Для использования enconv нужно установить пакет enca:
Обе команды — recode и enconv — имеют кучу возможных опций, в простейших случаях для перекодирования одного или нескольких файлов в одной директории использование такое:
На что следует обратить внимание: для команды recode надо указать направление перекодировки (как минимум, исходную кодировку, в примере это cp1251; если не указана конечная кодировка, то программа заглянет в переменные окружения LC_ALL, LC_CTYPE, LANG). Для enconv указывать направление перекодировки необязательно вообще: программа способна определить исходную кодировку, проанализировав текст файла, а конечная кодировка будет взята из переменных окружения.
То есть, если надо перекодировать файлы в вашу «обычную» кодировку, используемую в системе, примеры могут выглядеть так:
Для того, чтобы программа enconv точнее могла определить исходную кодировку файла, ей можно помочь, подсказав, на каком языке написан текст в файле. В нашем примере указан русский язык: «-L russian».
Список языков, известных программе, можно посмотреть так:
enca — это не опечатка. Программа enconv является частью пакета enca.
Как перекодировать файлы из/в utf-8, cp1251, koi8 и т. д. рекурсивно в поддиректориях
Для рекурсивного изменения кодировки файлов надо привлечь команду find, затем перекодировать то, что она нашла.
Среди множества опций команды find имеется набор для выполнения действий над найденными файлами. Нас интересует опция «-exec command <> ;».
command — команда, которую надо выполнить для каждого найденного файла;
<> — вместо скобок будет подставлено имя файла, найденного командой find;
; — точка с запятой указывает для команды find, в каком месте заканчиваются параметры команды command.
Надо иметь в виду, что «<>» и «;» может понадобиться экранировать с помощью одинарных кавычек или «\», чтобы предотвратить интерпретацию командной оболочкой (shell expansion).
Собираем всё вместе. Чтобы перекодировать из cp1251 (windows-1251) в utf-8 рекурсивно в поддиректориях все файлы, имена которых заканчиваются на ‘.txt’, надо выполнить:
Конвертировать Базу Данных DLE utf-8 в windows-1251
Для начала необходимо сделать дамп Базы Данных вашего сайта (можно, и даже лучше, средствами самого движка через админпанель сайта), которые работают в кодировке utf-8, и скачать этот дамп себе на локальный компьютер.
Базу Данных на хостинге можно оставить прежнюю, но из неё нужно будет удалить все таблицы, оставив её полностью пустой. Затем через phpmyadmin вам будет нужно на вкладке «Операции» выставить «Сравнение» cp1251_general_ci для этой базы данных.
Для самого сайта, чтобы не было проблем с отображением кодировки в браузерах, в вашей панели управления на хостинге нужно будет выставить для вашего домена кодировку windows-1251 перед началом работ. Теперь можно провести установку DLE в кодировке windows-1251 в вашу пустую базу данных. При установке укажите префикс таблиц, все логины и пароли к админке сайта и базе данных точно такими же, какие они у вас были до этого в прежней базе данных и сайте на utf-8. Это поможет вам избежать проблем и непонятных вам ситуаций в дальнейшем.
Конвертировать базу данных будем в два этапа.
— Первый этап
Для начала нам нужно сменить название кодировки с utf-8 на windows-1251 по всей базе данных для всех таблиц. Для этого вызываем диалог поиска и замены в Notepad++ и будем менять текст в базе данных с utf8 на cp1251, как на скриншоте.
Нажимаем «Заменить всё» и после нажимаем «Сохранить изменения» (иконка дискеты). Для DLE 9.5 на данный момент таблиц должно быть 35 и столько же должно быть произведено замен (см. скриншот).
— Второй этап
Теперь нам нужно конвертировать саму базу данных в windows-1251. Чтобы сохранить кириллицу кириллицей, без всяких крякозяблов, делаем следующее.
Нажимаем кнопку «Кодировка» в меню Notepad++ и затем в выпадающем меню выбираем «Преобразовать в ANSI».
Ждем пока Notepad++ закончит эту операцию (на больших базах это может занять время) и после этого нажимаем снова «Сохранить изменения» (иконка дискеты).
Если вы сделали все именно так, то кириллица в вашей базе данных сохранилась без изменений, а в правом нижнем углу окна Notepad++ будет видна кодировка «UNIX ANSI».
Ваша новая база данных в кодировке windows-1251 готова. Теперь вы можете упаковать её в zip архив, чтобы уберечь от возможных повреждений при загрузке на хостинг, и загрузить в папку backup вашего нового сайта, где уже распакуете этот архив через панель управления хостингом (ISPManager или аналогичные). После этого вы сможете восстановить базу данных стандартными средствами движка через админпанель сайта в разделе «Управление базой данных». После восстановления базы данных не забудьте в разделе «Категории» нажать кнопку «Отсортировать категории». Вот, собственно, и все премудрости, теперь у вас и сайт, и база данных в кодировке windows-1251.
Если вы прислушались к моему совету при новой установке Dle в кодировке windows-1251сохранить префиксы таблиц, а также логины и пароли к базе данных и админке сайта прежними, то вы без проблем войдете на сайт после восстановления нашей измененной базы данных.
Для того, чтобы вам вернуть все настройки (не зря я говорил о необходимости сохранить все файлы из папки engine/data), откройте сохраненный файл config.php, найдите строчку
Ну вот и все. Надеюсь, что эта информация будет для кого-то полезной. Помните, что чтобы избежать ошибок с конвертированием файлов и базы данных, все операции нужно делать с точностью и в два этапа, как описано выше.
Конвертировать Базу Данных DLE utf-8 в windows-1251
«Автор:» ower xz
Для баз данных превышающий размер и возможности для конвертации с помощью текстового редактора Notepad++ можно воспользоваться сервером для выполнения данной функцией прочитать подробно.
Предлагаем полезную статью конвертировать Базу Данных DLE utf-8 в windows-1251