Как жестко задать UTF-8 в заголовках (php скрипт формы обратной связи)

программирование php кодировка utf

Имеется скрипт формы обратной связи Secure PHP Form Mailer Script ( _dagondesign.com/articles/secure-php-form-mailer-script/ ) - все прекрасно, только вот уже неделю бьюсь с кодировками в заголовках (конкретно "name" и "subject". Автор, к сожалению, молчит.
Везде где можно выставлена UTF-8, но все неанглийские символы приходят в белиберде (судя по всему в ISO):
На примере поля subject: Тема сообщения
А должно быть: Тема сообщения
В сходном коде сообщения: Subject: =?UTF-8?Q?=C3=90=C2=A2=C3=90=C2=B5=C3=90=C2=BA=C3=91?= =?UTF-8?Q?=C2=81=C3=91=C2=82=20=C3=91=C2=81=C3=90=C2=BE=C3=90=C2=BE=C3=90?= =?UTF-8?Q?=C2=B1=C3=91=C2=89=C3=90=C2=B5=C3=90=C2=BD=C3=90=C2=B8=C3=91?= =?UTF-8?Q?=C2=8F?=
В скрипте применительно к проблемным загаловкам задано:
...
$sender_name = 'fm_name';
$sender_email = 'fm_email';
...
if (function_exists(mb_encode_mimeheader)) {
$email_subject = mb_encode_mimeheader($email_subject, 'UTF-8', 'Q', '');
$sender_name = mb_encode_mimeheader($sender_name, 'UTF-8', 'Q', '');
}
...
$headers .= 'From: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;
$headers .= $extra_recips;
$headers .= 'Reply-To: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;
$headers .= 'Return-Path: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;
$headers .= "Message-ID: <" . time() . "ddfm@" . $_SERVER['SERVER_NAME'] . ">" . PHP_EOL;
$headers .= 'X-Sender-IP: ' . $_SERVER["REMOTE_ADDR"] . PHP_EOL;
$headers .= "X-Mailer: PHP v" . phpversion() . PHP_EOL;
$headers .= 'MIME-Version: 1.0' . PHP_EOL;
// $headers .= 'Content-Type: multipart/related; boundary="' . $mime_boundary . '"'
...
Повторюсь, проблема только с заколовками - в теле письма все нормально. Проблема как на локальной машине (денвер), так и на хостинге (отсылал письма на gmail, яндекс + через outlook, thunderbird - везде одно и то же).
Помимо шаманства с самим скриптом пробовал жестко задавать utf-8 через .htaccess и напрямую через конфиг апача - 0 реакции.
Ответы:
у меня была на java сервлете такая бодяга.
после response.setCharacterEncoding("UTF-8"); в коде сервлета все заработало
классика. дебил спрашивает - дебил отвечает.
все правильно. задаем кодировку строчки в письме в конфиге веб-сервера.
называя это шаманством. правильно. когда ума нет, только и остается тыкать наугад.
хотя, казалось бы - что может быть проще, чем вывести  на экран обрабатываемые данные на каждом этапе? и посмотреть - в какой момент произошел косяк. то ли при передаче из браузера, то ли при обработке какой-либо функцией. но это ж надо думать. куда проще написать на деревню дедушке.
> Японский Городовой
а в лоб не хочешь получить за дебила. чмо
>Гость2222
Достаточно глянуть на пару ответов когда Городовой уже отвечал когда-то и картина проясняется
Вообще-то, ничего естественного.
Если уж ты и твой друг взялись шаманить с кодировкой браузера, то логично предположить, что из браузера приходит в неверной кодировке. Иначе при чем тут .htaccess, конфиг апача и response.set?
чтобы русский текст тоже был нормально нужно нетолько задать utf-8 в настройках а нужна еше и перекодировка поиши  нормальные перекодировщики типа recode, decode
Страница отправки:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
я одного не понимаю. почему обязательно юзать какую-то неочевидную функцию? почему бы просто руками не закодировать?
хоть в квотет принтабле, хоть в бейс64. получится быстрее и надежнее
по остальным ответам можно, кстати, убедиться, что мое определение про дебилов не так уж далеко от истины. из 3 человек ни один даже вопроса понять не смог.
попробуй сам догадаться.
формат этой строки простой как две копейки.
просто посмотри на нее внимательно.
только не на эту кривизну, а а нормальные строки сформированные нормальными почтовыми программами.
по мне глупость хуже грубости
борец  мля
Перекодируй данные с помощью функциит iconv в кодировку cp1251.
почему? Очень просто - нормально и одинаково письма обрабатываются в рунете и дестоп-приложениях только в случае виндовой кодировки - проверено. Что касается отправки - советую пользоваться готовыми проверенными решениями, вместо изобретения квадратно-колесового велосипеда.
Одно из таких решений - [1]
ну вот и очередной подтянулся.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.