Кодировка. Изменение кодировки текста
В Интернете существует достаточно много кодировок для передачи текста. Это создаёт некоторые ограничения и сложности в обмене информацией между сайтами, базами данных и другими интернет-ресурсами. Кодировка текста, с которой работает клиентское приложение, может не совпадать с кодировкой, передаваемой сервером. В результате при отображении данных могут «биться» некоторые буквы (например, «ш» или «и») в текстах или, вообще, показываться одни нечитаемые «кракозябры». Разработчики сайтов частенько сталкиваются с ситуацией, когда нужно перекодировать текст из одной кодировки в другую (например, из кодировки «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);//пишем данные обратно в файл
?>
Вот таким вот способом нам удалось перекодировать файл большого размера из одной кодировки в другую.
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
"Я придерживаюсь простого правила: все дела этого дня должны быть сделаны в этот день". |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.