Проблема с кодировкой в форме PHP (заказ обратного звонка)

A
На сайте с 15.08.2005
Offline
97
3180

Доброго времени суток.

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

Вопрос в следующем - там где в форме вставляются числовые значения (телефон и время) - всё ОК, но там, где нужно прописывать Имя (кириллица) приходят ????????

Вот что имеем:

Имя: ???????

Удобное время для звонка: 12 ?????

Телефон: 8-333-0000000

Что и где нужно переделать ???

Заранее благодарен всем откликнувшимся!!!

Форма:

<form action="options.php" method="post" name="call-form" class="call-form">


<h3>Заказать обратный звонок</h3>

<input type="text" required="required" class="inputbox" name="name" placeholder="Ваше имя">

<input type="phone" required="required" class="inputbox phone-box" name="number" placeholder="+7 (___) ___-__-__">

<input type="vopros" required="required" class="inputbox" name="vopros" placeholder="Удобное время звонка (по МСК)">

<input name="" id="submit" type="submit" class="button" value="Перезвоните мне"/>

</form>

Содержимое файла options.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Данные обрабатываются...</title>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="js/jquery.arcticmodal.js" type="text/javascript"></script>

</head>

<?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['vopros'])) {$vopros = $_POST['vopros']; if ($vopros == '') {unset($vopros);}}
if (isset($_POST['number'])) {$number = $_POST['number']; if ($number == '') {unset($number);}}


/* Убираем все лишние пробелы, а также преобразуем все теги HTML в символы*/
$name = htmlspecialchars(trim($name));
$email = htmlspecialchars(trim($email));
$vopros = htmlspecialchars(trim($vopros));
$number = htmlspecialchars(trim($number));


/* Формируем сообщение */
$address = "name@site.ru"; //кому
$sub = "Заказ обратного звонка"; // тема
$mes = "Имя: $name \nE-mail: $email \nУдобное время для звонка: $vopros \nТелефон: $number";

/* Отправка сообщения */
$verify = mail ($address,$sub,$mes,$headers);
if ($verify == 'true')

{

echo '<table width="100%" id="tabl" align="center" class="blue">
<tr>
<td>
<div align="center" class="tit" style="padding-top:15%">Спасибо, Ваш запрос успешно отправлен!</div><br><br>
<script type="text/javascript">
function timer(){
var obj=document.getElementById("timer_inp");
obj.innerHTML--;
if(obj.innerHTML==0){history.go(-1);setTimeout(function(){},1000);}
else{setTimeout(timer,1000);}
}
setTimeout(timer,1000);
</script>
<div align="center" class="tit">Через <span id="timer_inp">9</span> секунд вы будите перенаправлены обратно</div>
</td>
</tr>
</table>';

}
else
{
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
echo '<table width="100%" id="tabl" align="center" class="blue">
<tr>
<td class="pagu" align="center">
<div align="center"><span style="color:red;">Error!</span> Ваш запрос не отправлен, пожалуйста, попробуйте еще раз!</div><br><br>
<script type="text/javascript">
function timer(){
var obj=document.getElementById("timer_inp");
obj.innerHTML--;
if(obj.innerHTML==0){history.go(-1);setTimeout(function(){},1000);}
else{setTimeout(timer,1000);}
}
setTimeout(timer,1000);
</script>
<div align="center" class="tit">Через <span id="timer_inp">9</span> секунд вы будите перенаправлены обратно..
</div>
</td>
</tr>
</table>';

}
?>

</body>
</html>
L1
На сайте с 21.09.2007
Offline
114
#1

У Вас переменная $headers пустая перед отправкой.

Попробуйте перед отправкой добавить:

$headers = 'Content-type: text/html; charset=UTF-8' . "\r\n";

Там где коммент /* Формируем сообщение */

UPD. Хотя вижу у Вас частично приходит в нормальной кодировке. Тогда нужно полученные данные с формы переконвертировать. Какая кодировка у файла options.php?

Р
На сайте с 10.10.2011
Offline
63
#2

В теге form нехватает атрибутов enctype="multipart/form-data" и/или accept-charset="UTF-8"

Разрешаю пользователям высокого мнения о себе и своих способностях минусовать мою репутацию )
siv1987
На сайте с 02.04.2009
Offline
427
#3
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}

Подобный говнокод замените на

$name = isset($_POST['name']) ? $_POST['name'] : '';

$name = htmlspecialchars(trim($name));

Для htmlspecialchars желательно явно указать кодировку. Если кодировка на указана, по умолчанию до 5.4 это ISO-8859-1

AVStudio:
$verify = mail ($address,$sub,$mes,$headers);
if ($verify == 'true')

mail вроде возвращает boolean'овское значение true-false, зачем сравнивать его со строкой? Я конечно понимаю что в PHP выражение true == 'true' вернет true, но все же так лучше не писать, это признак говнокода.

if($verify)

A
На сайте с 15.08.2005
Offline
97
#4

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

---------- Добавлено 30.05.2014 в 13:19 ----------

L3n1n:
Какая кодировка у файла options.php?

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

---------- Добавлено 30.05.2014 в 13:35 ----------

siv1987:
Подобный говнокод замените на
$name = isset($_POST['name']) ? $_POST['name'] : '';

Заменил - не помогло.

Для htmlspecialchars желательно явно указать кодировку. Если кодировка на указана, по умолчанию до 5.4 это ISO-8859-1

Скажите как это сделать (с php вообще не дружу) ???

L1
На сайте с 21.09.2007
Offline
114
#5
AVStudio:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Это не кодировка файла, это заголовки которые вы отдаете юзеру.

http://www.php.net/manual/ru/function.iconv.php

iconv меняет кодировку текста. Но нужно знать в какой кодировке пришел текст и в какой кодировке сохранен ваш файл.

siv1987
На сайте с 02.04.2009
Offline
427
#6
A
На сайте с 15.08.2005
Offline
97
#7
L3n1n:


http://www.php.net/manual/ru/function.iconv.php
iconv меняет кодировку текста. Но нужно знать в какой кодировке пришел текст и в какой кодировке сохранен ваш файл.

Уважаемые siv1987 и L3n1n, для меня php - что в 3 года учиться азбуке ...

То, что вы указали ссылки - почитал, но я ничего в этом не понимаю.

Если вас не затруднит, пришлите хоть какой-то ещё вариант добавления или правки кода ...

дани мапов
На сайте с 06.09.2012
Offline
204
#8

Меняем


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['vopros'])) {$vopros = $_POST['vopros']; if ($vopros == '') {unset($vopros);}}
if (isset($_POST['number'])) {$number = $_POST['number']; if ($number == '') {unset($number);}}

на


$name = empty($_POST['name']) ? '' : iconv("windows-1251", "utf-8", $_POST['name']);
$email = empty($_POST['email']) ? '' : $_POST['email'];
$vopros = empty($_POST['vopros']) ? '' : iconv("windows-1251", "utf-8", $_POST['vopros']);
$number = empty($_POST['number']) ? '' : $_POST['number'];
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
A
На сайте с 15.08.2005
Offline
97
#9

Спасибо большое дани мапов!

Всё работает так, как нужно!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий