Php iconv koi8 r

Отправка e-mail в русской кодировке средствами PHP

Стандартная функция отправки почты в PHP не заботится о кодировке письма, а специальные классы отправки писем могут показаться слишком тяжеловесным решением. В настоящей статье приведена простая функция, которая позволяет отправлять MIME-совместимые письма на русском языке в виде простого текста или в формате HTML.

Тело письма может быть текстом в любой кодировке. Немного сложнее дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования — BASE64 и Quoted-Printable. BASE64 более универсальна и работает в том числе для кодировки UTF-8, поэтому мы выбрали именно эту форму. MIME-совместимый почтовый клиент обязан уметь читать обе формы.

Далее код функции, который достаточно схематичен:

function send_mime_mail ( $name_from , // имя отправителя
$email_from , // email отправителя
$name_to , // имя получателя
$email_to , // email получателя
$data_charset , // кодировка переданных данных
$send_charset , // кодировка письма
$subject , // тема письма
$body , // текст письма
$html = FALSE , // письмо в виде html или обычного текста
$reply_to = FALSE
) {
$to = mime_header_encode ( $name_to , $data_charset , $send_charset )
. ‘ ‘ ;
$subject = mime_header_encode ( $subject , $data_charset , $send_charset ) ;
$from = mime_header_encode ( $name_from , $data_charset , $send_charset )
. ‘ ‘ ;
if ( $data_charset != $send_charset ) {
$body = iconv ( $data_charset , $send_charset , $body ) ;
}
$headers = «From: $from \r \n » ;
$type = ( $html ) ? ‘html’ : ‘plain’ ;
$headers .= «Content-type: text/$type; charset=$send_charset \r \n » ;
$headers .= «Mime-Version: 1.0 \r \n » ;
if ( $reply_to ) {
$headers .= «Reply-To: $reply_to» ;
}
return mail ( $to , $subject , $body , $headers ) ;
}

Читайте также:  Check python version anaconda

function mime_header_encode ( $str , $data_charset , $send_charset ) {
if ( $data_charset != $send_charset ) {
$str = iconv ( $data_charset , $send_charset , $str ) ;
}
return ‘=?’ . $send_charset . ‘?B?’ . base64_encode ( $str ) . ‘?=’ ;
}

Мы определили собственную функцию mime_header_encode() для преобразования каждого заголовка в MIME-совместимый формат, несмотря на то, что в PHP предусмотрена аналогичная функция mb_encode_mimeheader(). От встроенной функции нам пришлось отказаться, так как на нашем сервере (PHP 5.1.6) она работает некорректно (возвращает неверный результат).

Использование описанной функции достаточно простое, см. пример ниже. В случае, если кодировка отправки письма отличается от текущей кодировки данных, используется iconv() для преобразования кодировки.

send_mime_mail ( ‘Автор письма’ ,
‘sender@site.ru’ ,
‘Получатель письма’ ,
‘recepient@site.ru’ ,
‘CP1251’ , // кодировка, в которой находятся передаваемые строки
‘KOI8-R’ , // кодировка, в которой будет отправлено письмо
‘Письмо-уведомление’ ,
«Здравствуйте, я Ваша программа!» ) ;

© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.

Источник

конвертировать KOI8-R в UTF8

Обратите внимание, что преобразование между кодировками гарантированно будет работать, только если вы на 100% знаете, что такое оригинальная кодировка.

2 ответа

$output = mb_convert_encoding($input, 'UTF-8', 'KOI8-R'); 
$output = iconv('KOI8-R', 'UTF-8', $input); 

Существует также возможность удалить поврежденные или непризнанные символы

iconv("KOI8-R", "UTF-8//IGNORE", $text) 

Но вам нужно установить iconv.

Ещё вопросы

  • 0 Mysql: ЗАКАЗАТЬ дважды
  • 1 SqlDependency не работает событие, если имеются очереди и запрос действителен
  • 1 Подсчет всех символов в строке
  • 0 запустить команду exec () столько раз, сколько строк в текстовом файле
  • 1 Что означает «поддержка» в Android?
  • 1 Как добавить аннотации Java в JNI SWIG API?
  • 0 Метод uploadStoredFiles не существует в jQuery.fineUploader
  • 0 изображение не загружается при использовании наследования шаблонов
  • 1 D3 v4, перемещая и круг, и текст одновременно
  • 1 c # назначить кнопку пользовательское расположение на FlowLayoutPanel
  • 0 Handsontable реализация
  • 0 как установить кнопку положения внизу?
  • 0 Массив ошибок используется как инициализатор, и я не знаю ошибку
  • 1 Свободный запрос за пределами просроченного соединения
  • 0 REGEX PHP Строка в JSON Вывод
  • 1 Почему класс YUIJsCompressorProcessor не включен ни в ядро, ни в расширения jar для wro4j?
  • 1 ImportError: нет модуля с именем textract
  • 1 Как получить доступ к user_posts в Facebook Graph API
  • 0 Несколько экземпляров свойства перехода среди классов, используемых в одном элементе
  • 1 Группировать по numpy.mean
  • 1 Самый быстрый способ найти кандидатов первичного ключа в файле CSV?
  • 1 Разобрать данные и представить изображение PNG
  • 1 Обновить значения словаря
  • 0 Избегание случайных указателей в условиях, включающих AND
  • 1 KnockoutJS — показать накопленную стоимость для каждого элемента
  • 0 Кросс-браузерное поле
  • 1 Изменить строку подключения модели данных xpo во время выполнения
  • 0 Найти брата текущего элемента массива
  • 1 NoSuchMethodError: нет статического метода decodeBase64
  • 1 Должен ли Pandas DatetimeIndex.weekday возвращать индекс или пустой массив?
  • 0 Средневзвешенное значение по порядку в углах
  • 0 c # — выбрать ключи и значения, которых нет в другом словаре
  • 0 Рекомендации JQuery: запускайте эффекты между элементами в последовательности
  • 0 UnknownError: unknown error: элемент не активен в точке (713, 6). Другой элемент получит щелчок:
  • 0 PHP с помощью MySQL конвертировать набор результатов в массив, а затем в JSON
  • 0 Проблемы с выпадающим списком навигации по CSS
  • 0 Выберите максимум, сгруппированный по годам
  • 0 Как использовать функцию std :: transform ()
  • 0 Передача пользовательских функций в объекты jquery
  • 0 Как использовать угловой JS, чтобы обновить таблицу после нажатия кнопки отправки
  • 1 Ionic 2 Angular 2 — не удается получить доступ к NavController из метода
  • 1 Как изменить цвет фона для определенных элементов виджета в RecycleView?
  • 0 Как показать динамический контент на Ionic Custom POPUP
  • 0 Оператор SQL не получает определение переменной
  • 0 Элементы таблицы и неупорядоченные списки нельзя просматривать должным образом во всех версиях Internet Explorer
  • 1 Проблема с отображением приложения Android Studio
  • 0 Меню CSS: перенос слов в подменю
  • 0 Angularjs: модель не доступна
  • 0 JQuery код функции each () выполняется, даже если в коллекции нет элементов
  • 0 jQuery inArray не работает
Читайте также:  Python connect to olap cube

Источник

Iconv

Что такое iconv – утилита в nix системах для конвертации текста в различные кодировки, набор поддерживаемых кодировок зависит от вашей реализации ОС. Одноименные функции есть в php, perl, С в своей работе они используют эту системную утилиту(библиотеку)

Для чего iconv

Частое использование при наличие SQL дампа необходимо пере конвертировать всю выгруженную базу в другую кодировку для загрузки ее в новую базу на другом сервере при не совпадение дефолтных кодировок, также частая задача пере конвертировать кучу текстовых файлов в другую кодировку например, восстановленный сайт и веб архив.

Как определить текущую кодировку ?

Можно скопировать вашу кракозяблю и воспользоваться декодером Лебедева http://www.artlebedev.ru/tools/decoder/, при удачном результате внизу он напишет, то в какой кодировке ваш текс т пример: koi8-r –> utf-8

Решения с помощью iconv

Если декодер Лебедева вам написал что он сделал koi8-r –> utf-8 то вам чтобы повторить подвиг Лебедева в iconv нужно сделать ровно наоборот utf-8 в koi8-r

Пример:
iconv -c -f utf-8 -t koi8-r file.htm
Параметр « –c» используется для исключение ошибки спотыкания о не перекодируемый символ: «iconv: illegal input sequence at position» Если стоит задача перекодировать все файлы в текущем каталоге:
find . * | for file in *; do cat $file | iconv -cs -f utf8 -t koi8-r > $file.tmp; mv -f $file.tmp $file; done

iconv php utf8 в koi8-r

foreach ($in as $line) fputs($out, iconv(«UTF-8″,»koi8-r», $line));>
?>

Источник

Оцените статью