Проблема с кодировкой при использовании функции mail()

excl

Новичок
Возникла следующая проблема. После отправки данных формы некоторые данные приходят на почту в неадекватной кодировке. Но! В форме иероглифов приходят только лишь переменные $name и $birth_date, которые включены внутрь переменной $mess. Сам текст внутри $mess помимо озвученных выше переменных приходит в нормальной форме. Текст в форму набирается на русском языке. Например: "Анна Петрова", "7 марта". Собственно как сделать так, чтобы все письмо было на русском языке?

Форма отправки:
PHP:
<form action="../send2.php" method="post">
<div>
<div class="formField rsform-block rsform-block-name">Имя и фамилия: *<br /> <input class="rsform-input-box" type="text" name="name" size="20" /></div>
<br />
<div class="formField rsform-block rsform-block-date">Дата рождения: *<br /> <input class="txtCal rsform-calendar-box" type="date" name="birth_date" /></div>
<br />
<div class="formField rsform-block rsform-block-mail">Ваш e-mail: *<br /> <input class="rsform-input-box" type="text" name="from" size="20" /></div>
<div class="formField rsform-block rsform-block-send"><br /> <input class="rsform-submit-button" type="submit" name="submit" value="Отправить" /></div>
</div>
</form>
Скрипт отправки:
PHP:
<?php 
// если была нажата кнопка "Отправить" 
if($_POST['submit']) {
        $to = '[email protected]';
        $title = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000); 
        $name = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000);
        $birth_date = substr(htmlspecialchars(trim($_POST['birth_date'])), 0, 1000);     
 
// Текст письма
$mess = "
Имя и фамилия: $name<br /><br />  
Дата рождения: $birth_date<br />
";

// функция, которая отправляет наше письмо
mail($to, $title, $mess, 'From:'.$from); 
echo 'Спасибо! Ваше письмо отправлено.'; 
}

?>
 
Последнее редактирование:

ecspl01t

Новичок
попробуй так
PHP:
<?php 
// если была нажата кнопка "Отправить" 
if($_POST['submit']) {
        $to = '[email protected]';
        $from = '[email protected]';
        $title = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000); 
        $name = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000);
        $birth_date = substr(htmlspecialchars(trim($_POST['birth_date'])), 0, 1000);     
 
// Текст письма
$mess = "
Имя и фамилия: $name<br /><br />  
Дата рождения: $birth_date<br />
";

// функция, которая отправляет наше письмо
$headers = 'From: test <'.$from.'>' . "\r\n";
$headers .= "Content-type: text/html; charset=\"utf-8\"";
mail($to, $title, $mess, $headers); 
echo 'Спасибо! Ваше письмо отправлено.'; 
}

?>
 

ecspl01t

Новичок
киньте скрин уже полученной e-mail и да, кодировки совпадают ?
 

excl

Новичок
На файле с формой UTF-8, на втором файле буквально кодировка не указана, так как это просто скрипт, но я и указывал буквально. Ничего не менялось. Скрин прикрепил.

Добавлю к вопросу о совпадении кодировок. Если я внутрь одной переменной не буду втыкать еще две, а просто ее отображать, то проблем с кодировкой не будет. Фишка во вложенности переменных.

И еще момент!

PHP:
echo $name;
echo $birth_date;
 
// Текст письма
$mess = "
Имя и фамилия: $name<br /><br />  
Дата рождения: $birth_date<br />
";
Если я вывожу переменные перед отправкой, то в окне браузера они отображаются корректно.
 

Вложения

  • 52,8 KB Просмотры: 14
Последнее редактирование:

ecspl01t

Новичок
кодировка формы utf8
кодировка обработчика utf8
кодировка mail utf8
вот попробуй отправить себе данные http://test.altme.org.ua/form.php
email укажи в форме свой и потом проверь почту..
 
  • Like
Реакции: excl

ecspl01t

Новичок
форма
PHP:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
	$(document).ready(function () {
		$(".rsform-submit-button").click(function() {
			var f_name = $(".rsform-input-box").val();
			var f_date = $(".rsform-calendar-box").val();
			var f_email = $(".rsform-input-email").val();
			$.post("send.php",{
				f_name:f_name,
				f_date:f_date,
				f_email:f_email
			},function(data) {
				$(".result").html(data).fadeIn("fast").delay(2000).fadeOut("fast");
			});
			return false;
		});
	});
</script>
<style type="text/css">
	.result{width:300px;padding:15px 10px;background: #eee;border:1px solid #ccc}
</style>
<div class="result" style="display:none;"></div>
<form>
<div>
<div class="formField rsform-block rsform-block-name">Имя и фамилия: *<br /> <input class="rsform-input-box" type="text" name="name" size="20" /></div>
<br />
<div class="formField rsform-block rsform-block-date">Дата рождения: *<br /> <input class="txtCal rsform-calendar-box" type="date" name="birth_date" /></div>
<br />
<div class="formField rsform-block rsform-block-mail">Ваш e-mail: *<br /> <input class="rsform-input-email" type="text" name="from" size="20" /></div>
<div class="formField rsform-block rsform-block-send"><br /> <input class="rsform-submit-button" type="submit" name="submit" value="Отправить" /></div>
</div>
</form>
PHP:
<?
        $to			= $_POST['f_email'];//тот адрес который укажешь в форме туда и отправиться данные
        $from 	 	= '[email protected]';
        $title 	 	= $_POST['f_name']; 
        $name 		= $_POST['f_name'];
        $birth_date = $_POST['f_date'];     
 
// Текст письма
$mess = "
Имя и фамилия: $name<br /><br />  
Дата рождения: $birth_date<br />
";

// функция, которая отправляет наше письмо
$headers = 'From: test <'.$from.'>' . "\r\n";
$headers .= "Content-type: text/html; charset=\"utf-8\"";
mail($to, $title, $mess, $headers); 
echo 'Спасибо! Ваше письмо отправлено.'; 
?>
но форма сделанная под js, могу вернуть обратно как у Вас ранее было, чисто php.. ?!
 
  • Like
Реакции: excl

excl

Новичок
ecspl01t, дело в том, что форму вставляю в джумлу, а она режет джаваскрипт. Пока что ваш код у меня не заработал, разбираюсь. Письмо вообще не приходит, в теге <form> атрибут action прописал.

UP: Если не сложно, то версию без джаваскрипта покажите. Так как вижу, что именно в JS форма отправляется.
 

ecspl01t

Новичок
" а она режет джаваскрипт"
да она режет, там нужно знать как обходить эту хрень...
PHP:
<form action="send.php" method="POST">
<div>
	<div class="formField rsform-block rsform-block-name">Имя и фамилия: *<br /> <input class="rsform-input-box" type="text" name="name" size="20" /></div>
	<br />
	<div class="formField rsform-block rsform-block-date">Дата рождения: *<br /> <input class="txtCal rsform-calendar-box" type="date" name="birth_date" /></div>
	<br />
	<div class="formField rsform-block rsform-block-mail">Ваш e-mail: *<br /> <input class="rsform-input-email" type="text" name="from" size="20" /></div>
	<div class="formField rsform-block rsform-block-send"><br /> <input class="rsform-submit-button" type="submit" name="submit" value="Отправить" /></div>
</div>
</form>
PHP:
<?
if(!empty($_POST['name'])){
        $to			= $_POST['from'];//тот адрес который укажешь в форме туда и отправиться данные
        $from 	 	= '[email protected]';
        $title 	 	= $_POST['name']; 
        $name 		= $_POST['name'];
        $birth_date = $_POST['birth_date'];     
 
// Текст письма
$mess = "
Имя и фамилия: $name<br /><br />  
Дата рождения: $birth_date<br />
";

// функция, которая отправляет наше письмо
$headers = 'From: test <'.$from.'>' . "\r\n";
$headers .= "Content-type: text/html; charset=\"utf-8\"";
mail($to, $title, $mess, $headers); 
echo 'Спасибо! Ваше письмо отправлено.'; 
	echo '<meta http-equiv="refresh" content="4; url=form.php">';
}else{
	echo '<meta http-equiv="refresh" content="0; url=form.php">';
}
?>
 
  • Like
Реакции: excl

excl

Новичок
В общем похоже проблема в джумле или хостере. Потому что проверил на другом сервере твой код и все норм, а именно на этом хосте, да еще внутри джумлы не работает, просто ума не приложу в чем фишка.

В джумле на странице с формой вот такая вот строчка есть:
PHP:
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
UP: Проблема в хостере. Потому что, вне джумлы на этом хосте такая же ошибка.
 
Последнее редактирование:

bbldzr

Новичок
По поводу кодировок, проверьте ещё кодировки самих файлов, а не то, что прописано в мета-тегах.
 
  • Like
Реакции: excl

excl

Новичок
Проблема решена. Всем большое спасибо. Фишка была в том, что файл-обработчик на сервере лежал в кодировке ANSI.
 

ecspl01t

Новичок
Проблема решена. Всем большое спасибо. Фишка была в том, что файл-обработчик на сервере лежал в кодировке ANSI.
чем заливал на сервер ?
есть файловые менеджеры которые при заливке на сервер меняют кодировку файлов...
 

AnrDaemon

Продвинутый новичок
"ANSI Cyrillic" есть. Хотя, как вы правильно заметили, называется она совершенно иначе.
 
Сверху