• Добрый день. На сайте имеется форма, реализованная без плагинов. По клику на отправку через 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()

    • Ответ изменён 8 лет назад пользователем Yui.
    Автор galiof

    (@galiof)

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

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

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

    Автор galiof

    (@galiof)

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

    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 напрямую, и эффект был тот же самый

    • Ответ изменён 8 лет назад пользователем Denis Yanchevskiy. Причина: правила п14
    Автор galiof

    (@galiof)

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

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

    Автор galiof

    (@galiof)

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

    Автор galiof

    (@galiof)

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

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