На сайте имеется простая форма с не очень простым дизайном. По этому решил не использовать модулей и написать ее самостоятельно. Пробовал реализовывать по разному, остановился на следующем варианте. С помощью плагина jumi_pack поместил на страницу код обработки и с формы на нее сослался. Все работает, но письмо приходит в неправильной кодировке. Как исправить? Код обработчика: Код (PHP): <?php if (isset($_POST['name'])) { $name = $_POST['name']; if ($name == '') unset($name); } if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') unset($email); } if (isset($_POST['text'])) { $text = $_POST['text']; if ($text == '') unset($text); } /* Проверяем заполнены ли все поля */ if (isset($name) && isset($email) &&isset($text)) { /* Убираем все лишние пробелы и переносы строк, а также преобразуем все теги HTML в символы*/ $name = htmlspecialchars(trim($name)); $email = htmlspecialchars(trim($email)); $text = htmlspecialchars(trim($text)); /* Проверяем правильность ввода email-адреса */ if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)){ die("Неправильный формат e-mail адреса!"); } /* Формируем сообщение */ $address = "test@mail.ru"; $sub = "На сайте был задан вопрос"; $mes = "Имя: $name \n E-mail: $e-mail \n Текст сообщения: $text \n"; /* Отправка сообщения */ $verify = mail ($address,$sub,$mes); if ($verify == 'true'){ echo "Ваш вопрос принят!"; } else { echo "Ваш вопрос не принят. Проверьте правильность заполнения полей."; } } else{ echo "Вы заполнили не все поля!"; } ?> На сайте с кодировкой 1251 работает нормально, в joomle стоит utf-8, может в этом дело? Хотя utf-8 должен обрабатывать все знаки. Та же ситуация если вынести код в отдельный файл в кодировке utf-8.
скорее всего у тебя передача POST идёт в кодировке 1251 используй mb_convert для обратного преобразования или возможно что твой TRIM гонитс кодировкой UTF-8 и 1251, используй функции php которые есть в joomla, находятся они тут libraries\phputf8\ (это в 2.5 версии) примерно в этом же месте лежат и у 1.5 к тому же все обрезания лучше делать после перекодирования при использовании phputf8 joomla сама определит какие функции включены у php на хостинге и сама выберет лучшу для твоей задачи
То есть код сначала нужно записать вот так? Код (PHP): if (isset($_POST['name'])) { $name = mb_convert_encoding($_POST['name'], "UTF-8", "windows-1251"); if ($name == '') unset($name); }
То есть вот так? Код (PHP): if (isset($_POST['name'])) { $name = mb_convert_encoding($_POST['name'], "UTF-8", "windows-1251"); }
С переменными помогло, только привел не к utf-8 а к 1251, наоборот не работает, а как лучше для всего остального текста письма поставить нужную кодировку? В частности Код (PHP): $sub = "На сайте был задан вопрос"; $mes = "Имя: $name E-mail: $email Текст сообщения: $text Неужели нужно выносить текст в отдельные переменные и менять им кодировку? И не понятно какая она изначально идет в них.
Я так и делал изначально, код был в отдельном файле и он был сохранен в utf-8, но кодировка письма была не верной. Создал страницу в joomla и поместил код туда, думал что у этой страницы должна была быть кодировка сайта utf-8, но опять кракозябры.