Форма и кодировка сообщения

Тема в разделе "Формы", создана пользователем bubanay, 15.09.2012.

  1. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    На сайте имеется простая форма с не очень простым дизайном. По этому решил не использовать модулей и написать ее самостоятельно.

    Пробовал реализовывать по разному, остановился на следующем варианте.

    С помощью плагина jumi_pack поместил на страницу код обработки и с формы на нее сослался. Все работает, но письмо приходит в неправильной кодировке. Как исправить?

    Код обработчика:
    Код (PHP):
    1. <?php
    2.  
    3. if  (isset($_POST['name'])) {
    4.     $name = $_POST['name'];
    5.     if ($name == '') unset($name);
    6. }
    7. if  (isset($_POST['email'])) {
    8.     $email = $_POST['email'];
    9.     if ($email == '') unset($email);
    10. }
    11. if  (isset($_POST['text'])) {
    12.     $text = $_POST['text'];
    13.     if ($text == '') unset($text);
    14. }
    15.  
    16. /* Проверяем заполнены ли все поля */
    17. if  (isset($name) && isset($email) &&isset($text)) {
    18.  
    19.    /* Убираем все лишние пробелы и переносы строк, а также преобразуем  все теги HTML в  символы*/  
    20.    $name =  htmlspecialchars(trim($name));
    21.    $email =  htmlspecialchars(trim($email));
    22.    $text =  htmlspecialchars(trim($text));
    23.    
    24.  
    25.   /*  Проверяем правильность ввода email-адреса */
    26.   if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i",  $email)){
    27.      die("Неправильный  формат e-mail адреса!");
    28.   }
    29.  
    30.  /* Формируем сообщение */
    31.  $address  = "test@mail.ru";
    32.  $sub  = "На сайте был задан вопрос";
    33.  $mes  = "Имя: $name \n E-mail: $e-mail \n Текст сообщения: $text \n";
    34.  
    35.  /* Отправка  сообщения */
    36.  $verify =  mail ($address,$sub,$mes);
    37.  if  ($verify == 'true'){
    38.    echo  "Ваш вопрос принят!";
    39.  }
    40.  else {
    41.   echo  "Ваш вопрос не принят. Проверьте правильность заполнения полей.";
    42.  }
    43.  
    44. }
    45. else{
    46.   echo  "Вы заполнили не все поля!";
    47. }
    48. ?>


    На сайте с кодировкой 1251 работает нормально, в joomle стоит utf-8, может в этом дело? Хотя utf-8 должен обрабатывать все знаки.

    Та же ситуация если вынести код в отдельный файл в кодировке utf-8.
     
  2.  
  3. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    неужели без идей?
     
  4. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    скорее всего у тебя передача POST идёт в кодировке 1251
    используй mb_convert
    для обратного преобразования
    или возможно что твой TRIM гонитс кодировкой UTF-8 и 1251, используй функции php которые есть в joomla, находятся они тут libraries\phputf8\ (это в 2.5 версии)
    примерно в этом же месте лежат и у 1.5

    к тому же все обрезания лучше делать после перекодирования
    при использовании phputf8 joomla сама определит какие функции включены у php на хостинге и сама выберет лучшу для твоей задачи
     
  5. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    То есть код сначала нужно записать вот так?
    Код (PHP):
    1. if  (isset($_POST['name'])) {
    2.     $name = mb_convert_encoding($_POST['name'], "UTF-8", "windows-1251");
    3.     if ($name == '') unset($name);
    4. }
     
  6. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    а зачем?
    когда есть
    или думаешь что после конвертирования вдруг символы поисчезают?
     
  7. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    То есть вот так?
    Код (PHP):
    1. if  (isset($_POST['name'])) {
    2.     $name = mb_convert_encoding($_POST['name'], "UTF-8", "windows-1251");
    3. }
     
  8. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    да!!!
    потом уже делаешь с этой переменной чего тебе надо
     
  9. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    С переменными помогло, только привел не к utf-8 а к 1251, наоборот не работает, а как лучше для всего остального текста письма поставить нужную кодировку? В частности
    Код (PHP):
    1. $sub  = "На сайте был задан вопрос";
    2.  $mes  = "Имя: $name
    3. E-mail: $email
    4. Текст сообщения: $text

    Неужели нужно выносить текст в отдельные переменные и менять им кодировку? И не понятно какая она изначально идет в них.
     
  10. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    изначально надо вообще то файлы сохранять все в UTF-8
    тогда недолжно быть вообще ни каких проблемм
     
  11. Offline

    bubanay Недавно здесь

    Регистрация:
    06.04.2011
    Сообщения:
    134
    Симпатии:
    0
    Пол:
    Мужской
    Я так и делал изначально, код был в отдельном файле и он был сохранен в utf-8, но кодировка письма была не верной.

    Создал страницу в joomla и поместил код туда, думал что у этой страницы должна была быть кодировка сайта utf-8, но опять кракозябры.
     

Поделиться этой страницей

Загрузка...