РЭДЛАЙН

Лучшие решения для Вас и Вашего бизнеса!
Создание, обслуживание и Продвижение сайтов, Контекстная и Медийная реклама, Регистрация доменов, Хостинг, Редизайн, Аудит сайта, Создание сайтов в Хабаровске, Владивостоке, Москве и по всей России
Заказать услуги
Мы предлагаем
Интернет-форум
Интернет-каталог
Туристический портал
Сделать стартовой
Поиск по сайту
Карта сайта
Задать вопросы
Схема проезда
г.Хабаровск, ул.Гамарника, 15 оф.17 (4212) 658-653, 637-673, 8-924-200-7194, 8-924-200-4895
E-mail: rlhome@list.ru
       
Рэдлайн - Лучшие решения для Вас и Вашего бизнеса

Уважаемые посетители для Вас: быстрое создание, качественное обслуживание и реальное продвижение Интернет-проектов.

Мы предлагаем лучшие решения для Вас и Вашего бизнеса.

Подробнее ...

На голодный желудок русский человек ничего делать и думать не хочет, а на сытый - не может

Раневская Фаина Георгиевна - (1896-1984) - выдающаяся советская актриса театра и кино

Главная Программирование Кодировка. Изменение кодировки текста

Кодировка. Изменение кодировки текста Печать E-mail

В Интернете существует достаточно много кодировок для передачи текста. Это создаёт некоторые ограничения и сложности в обмене информацией между сайтами, базами данных и другими интернет-ресурсами. Кодировка текста, с которой работает клиентское приложение, может не совпадать с кодировкой, передаваемой сервером. В результате при отображении данных могут «биться» некоторые буквы (например, «ш» или «и») в текстах или, вообще, показываться одни нечитаемые «кракозябры». Разработчики сайтов частенько сталкиваются с ситуацией, когда нужно перекодировать текст из одной кодировки в другую (например, из кодировки «cp1251» в «UTF»). Разберёмся в этом вопросе вместе.

Распространённые кодировки текста ()

Используемых в Интернете кодировок очень много. Для русскоязычных текстов чаще всего используется кодировка «win1251» (в некоторых программах, например, базе данных «MySql» она же обозначается как «cp1251»). В почтовых программах для отправки электронных писем может применяться кодировка «koi8». Использование этих и других разнообразных кодировок идёт ещё с давних времён, что иногда создаёт проблемы с кодировкой в настоящем.

Недавно разработанная универсальная кодировка «UTF» (Unicode Transformation Format — формат преобразования Юникода) способна закодировать более 32 000 разнообразных букв алфавитов, значков и символов. Использование этой одной кодировки для обмена данными решает все проблемы несовместимости при передаче текстов.

На заметку! Если перед Вами стоит вопрос, в какой кодировке нужно создавать сайт и размещать тексты, то отвечаем — используйте «UTF»! Это наиболее универсальное решение, но не стоит забывать, что для хранения текстов в кодировке «UTF» требуется в два раза больше места. Если Ваш сайт нацелен только на аудиторию России, то, возможно, всё-таки стоит использовать более известную в нашей стране кодировку — «cp1251». Выбор оставляем за Вами.

Конечно, нам легко советовать: используйте «UTF»! Но до появления Юникода слишком много информации на сайтах было размещено с использованием других кодировок. В настоящее время часто встаёт вопрос перекодировки текста из уже устаревающих кодировок в «UTF». В частных случаях, может потребоваться перекодирование текста в других направлениях. Но об этом, ниже.

Способы перекодировки текста ()

Под перекодировкой текста стоит понимать процесс конвертирования текстовых файлов, скриптов и других текстовых данных из одной кодировки в другую. Наиболее часто приходиться конвертировать тексты между следующими кодировками: win1251, koi8 и UTF. Если у Вас проблемы с другой кодировкой, то подход к решению проблемы сохраняется. Перейдём от теории к практике.

Программа «Shtirlitz»

С помощью программы «Shtirlitz» («Штирлиц») легко можно расшифровать, раскодировать русский текст или перекодировать из одной кодировки в другую. Программа разработана под ОС «Windows» и работает с большинством известных кодировок.

Если бы ни ограничения, с которыми нам однажды пришлось столкнуться, то на этом можно было бы закончить давать Вам советы по раскодировке текстов. Программы «Штирлиц» было бы достаточно для решения всех проблем.

Однажды, нашим специалистам в процессе переноса сайта на хостинг потребовалось перекодировать файл дампа базы данных «MySql» из кодировки «UTF» в «win1251». Всё бы хорошо, но дамп базы был очень большого размера (более 100 Мб). Использовать программу «Штирлиц» для смены кодировки файла не получилось, поскольку она просто зависала при работе с таким объёмом текста. Преобразовать кодировку файла удалось, написав специальный скрипт на языке PHP. Остановимся на нём поподробнее.

Скрипт на PHP для смены кодировки текста

Приведём несколько модификаций php-скриптов для изменения кодировки файлов. Каждый из скриптов, решает свою несложную задачу. Вы можете дорабатывать их и использовать по своему усмотрению. Только обязательно делайте резервную копию важных данных перед порчей ;).

Задача 1. Смена кодировки файла

Пример кода PHP для изменения кодировки файла с «UTF» на «win1251»:

<?
/**************
* convert1.php
**************/
$file="./tmp.txt";//путь к файлу, который необходимо перекодировать
$text=file_get_contents($file);//читаем данные из файла
#конвертируем текст из «cp1251» в «utf-8»  с помощью функции iconv()
$text=iconv("cp1251", "utf-8", $text);
file_put_contents($file, $text);//пишем данные обратно в файл
?>

Изменить кодировку одного файла Вы вполне могли бы и с помощью упомянутой ранее программы «Shtirlitz». Более интересное решение, изменение кодировок группы файлов, например, в каталоге.

Задача 2. Смена кодировки всех файлов в каталоге

Пример кода PHP для изменения кодировки с «UTF» на «win1251» у всех файлов в заданном каталоге:

<?
/**************
* convert2.php
**************/
$path="./tmp"; //путь к каталогу, в котором лежат файлы для перекодировки
$handle=opendir($path);
while ($file = readdir($handle)){
if (is_file($path."/".$file)){
#находим по порядку все файлы и перекодируем
$text=file_get_contents($path."/".$file);//читаем данные из файла
#конвертируем текст из «utf-8» в «cp1251» с помощью функции iconv()
$text=iconv("utf-8", "cp1251", $text);
file_put_contents($path."/".$file, $text);//пишем данные обратно в файл
}
}
?>

Приведённые скрипты php наглядно демонстрируют использование функции iconv() для работы с кодировками. Но нашу проблему перекодировки больших по размеру файлов ни первый, ни второй скрипт не решают. Например, если размер исходного файла перед обработкой был 1 000 000 байт, то в процессе отладки мы наблюдали следующее:


//в переменной $text содержится текстовая информация из 1 000 000 символов
echo strlen($text)." байт";//1000000 байт
$text=iconv("cp1251", "utf-8", $text);
echo strlen($text)." байт";//8763 байт

Т.е. видно, что после применения функции iconv над длинной строкой мы получали урезанную до 8763 символов строку. При этом урезанная строка имела правильную нужную нам кодировку. К сожалению, мы не смогли понять странное поведение функции iconv() при работе с длинной строкой текста.

Проблему удалось решить следующим способом. Мы стали разбивать большой текст на части и передавать их на обработку в функцию iconv.

Возможно, Вы столкнулись с подобной проблемой при работе с большими файлами и наш скрипт пригодится.

Задача 3. Смена кодировки большого файла

Пример кода PHP для изменения кодировки с «UTF» на «win1251» у большого файла:

<?
/**************
* convert3.php
**************/
$file="./tmp.txt";//путь к файлу, который необходимо перекодировать
$arr=file($file);//читаем данные из файла в массив построчно
$cnt=count($arr);//число прочитанных строк из файла
$text=””;
for($i=0; $i<$cnt; $i++){
#конвертируем короткие строки из «utf-8» в «cp1251» с помощью функции iconv()
$text.=iconv("utf-8", "cp1251", $arr[$i]);
}
file_put_contents($file, $text);//пишем данные обратно в файл
?>

Вот таким вот способом нам удалось перекодировать файл большого размера из одной кодировки в другую.

 
Добавить ссылку на страницу:


Новые статьи и публикации



Вступление - Основные (стандартные) возможности и знакомство с сайтом

» Скачать видео-уроки по управлению сайтом от компании "Рэдлайн" (44.6Mb) [...]

Вступление - Основные возможности по управлению сайтом

» Круглосуточная система приема заказов и заявок "Рэдлайн" и клиентская поддержка

Все публикации

Ваше мнение

Откуда Вы узнали о нас?
 
Компания «РэдЛайн» © 2006 - 2011
www.lred.ru (рэдлайн.рф) 680000, г.Хабаровск, ул.Гамарника, 15 оф.17
(4212) 658-653, 637-673, 8-924-200-7194, 8-924-200-4895
E-mail: rlhome@list.ru Авторизация  Администрирование
Заказать услуги (круглосуточно)
Задать вопросы
Поиск по сайту
Карта сайта
Rambler's Top100 Яндекс.Метрика
Заказать сайт » Заказать обслуживание » Заказать рекламу » Предлагаем обменяться ссылками !!! » Добавить в закладки