• Добрый день. На сайте имеется форма, реализованная без плагинов. По клику на отправку через ajax данные уходят в php скрипт и отправляются функцией mail на почту. Но проблема следующая: те переменные которые мы получаем из формы приходят в неверной кодировке.
    Т.е. скрипт такой:

    
    <meta charset="UTF-8">
    
    <?php 
    
    $adminemail="";
    $adminemail2="";
    
    $marka=$_POST['marka']; 
    $model=$_POST['model']; 
    $god=$_POST['god'];
    $detal = $_POST['detal'];
    
      if(!is_array($_POST['detal'])){ 
      echo 'Значение не массив';
      }
      else{
    	$msg=" 
    	Марка автомобиля:$marka,  <br/>
    	Модель: $model,<br/>
    	Год выпуска: $god <br/>
    	Выбранные детали:<br/>
    	";
    	foreach( $detal as $value){
    	$msg .= "$value<br />";
    	}
    mail("$adminemail", "Сообщение с автоцентра", "$msg", "Content-type:text/html; charset = utf-8"); 
    mail("$adminemail2", "Сообщение с автоцентра", "$msg", "Content-type:text/html; charset = utf-8"); 
        }
      
    ?>
    

    И при получении я вижу следующее:

    фразы «Марка автомобиля:» и те что я прописал в php приходят нормально, а те что мы получаем из формы постом доходят кракозябрами. Если же все значения в форме вводить на английском языке то все нормально.

    Как сделать чтобы значение переменных нормально отображалось и на русском?

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • а UTF8 стоит дефолтной кодировкой у сервера?

    Модератор Yui

    (@fierevere)

    永子

    очень советую обратить внимание на необходимость санитизации ввода пользователя
    хотя бы через htmlspecialchars()

    • Ответ изменён 7 лет, 6 месяцев назад пользователем Yui.

    По поводу дефолтной кодировки:
    в .htaccess прописано AddDefaultCharset utf-8 по этому думаю что да.

    По поводу санитизации: т.е. необходимо прописать для всех переменных
    $marka = htmlspecialchars($_POST[‘marka’]); — таким образом?

    а ajax-скрипт какой?

    там все просто

    jQuery("form.remont").submit(function() {
    		jQuery.ajax({
    			type: "POST",
    			url: "http://irkbox.com/wp-content/themes/edge/contact.php",
    			data: jQuery(this).serialize()
    		}).done(function() {
    			jQuery(this).find("input").val("");
    			alert("Спасибо за обращение! Наши специалисты скоро с Вами свяжутся.");
    			jQuery("form.remont").trigger("reset");
    		});
    		return false;
    	});

    изначально обращался к php напрямую, и эффект был тот же самый

    • Ответ изменён 7 лет, 6 месяцев назад пользователем Denis Yanchevskiy. Причина: правила п14

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

    кодировка самих файлов utf8 без бом?

    Вроде да, сейчас этот момент еще раз проверил.

    Кажется все дело было в кодировке документа. В notepade ++ сейчас выбрал «преобразовать в utf» и при прямом переходе кодировка исправилась. Так что думаю что проблема решена. Спасибо!

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Кодировка при отправке формы через свой скрипт» закрыта для новых ответов.