Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > HTML и CSS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2011, 22:51   #1
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию Запутался в кодировке сайта

Всем привет!
сайт в кодировке windows-1251 но при инклуде файла form.php, форму отображает кракозябрами, и сообщение из формы приходит также кракозяброй.
order.php
Код:
<?
$pn='металлообрабатывающее оборудование';
include('tpl/top.php');
?>
<div align="center">
	<table border="0" width="1000" cellspacing="0" cellpadding="0">
		<tr>
			<td width="44" bgcolor="#FF6C00" rowspan="2">&nbsp;</td>
			<td width="226" bgcolor="#DCDCDC" align="left" valign="top">
			
<p align="center"><span style="font-weight: 700; background-color: #C0C0C0">
Специальное предложение!</span></td>
			<td width="2" bgcolor="#FF6C00" rowspan="2">&nbsp;</td>
			<td bgcolor="#DCDCDC" width="683" rowspan="2" align="left" valign="top">&nbsp;
			
			
			<?

include('tpl/form.php');
?>

			</td>
			<td width="45" bgcolor="#FF6C00" rowspan="2">&nbsp;</td>
		</tr>
		<tr>
			<td width="226" bgcolor="#DCDCDC" align="left" valign="top" height="20">
			
&nbsp;</td>
		</tr>
		<tr>
			<td width="44" bgcolor="#FF6C00">&nbsp;</td>
			<td width="226" bgcolor="#DCDCDC">&nbsp;</td>
			<td width="2" bgcolor="#FF6C00">&nbsp;</td>
			<td bgcolor="#DCDCDC" width="683">&nbsp;</td>
			<td width="45" bgcolor="#FF6C00">&nbsp;</td>
		</tr>
	</table>
</div>

<?
include('tpl/bot.php');
?>
form.php
Код:
<?php
session_start();

echo get_content();

function get_content()
{
  $html = '';
  
  if ( isset( $_SESSION['success'] ) )
  {
    $html = $html.'<p>Данные формы успешно отправлены</p>';
    unset( $_SESSION['success'] );
    return $html;
  }
  
  $name     = '';
  $email    = '';
  $subject  = '';
  $message  = '';
  
  // Если данные формы были отправлены
  if ( isset( $_POST['send'] ) )
  {
    $charset = "windows-1251";
    $name     = $_POST['name'];
    $email    = $_POST['email'];
    $subject  = $_POST['subject'];
    $message  = $_POST['message'];
    $message = '=?UTF-8?B?'.base64_encode($message).'?=';
    // Проверям, правильно ли заполнены поля формы
    $error = '';
    if ( trim($name) == '' )
      $error = $error.'<div class="errormsg">Please enter your name!</div>';
    if ( trim($email) == '' )
      $error = $error.'<div class="errormsg">Please enter your email address!</div>';
    else if ( !isEmail($email) )
      $error = $error.'<div class="errormsg">You have enter an invalid e-mail address. Please, try again!</div>';  
    if ( trim($subject) == '' )
       $error = $error.'<div class="errormsg">Please enter a subject!</div>';
    if ( trim($message) == '' )
       $error = $error.'<div class="errormsg">Please enter your message!</div>';
    // Если форма заполнена правильно - отравляем письмо
    if ( $error == '' )
    {
      if ( get_magic_quotes_gpc() ) $message = stripslashes($message);
      $to      = "andrey.platonov@bk.ru";
      $subject = '[Contact Form] : ' . $subject;
      $msg     = "From : ".$name."\n"."e-Mail : ".$email."\n"."Subject : ".$subject."\n\n"."Message : \n".$message;
      mail($to, $subject, $msg, "From: ".$email."\n"."Reply-To: ".$email."\n"."Return-Path: ".$email."\n");
      $_SESSION['success'] = true;
    }
    else // При заполнении формы были допущены ошибки
    {
      $_SESSION['form'] = array();
      $_SESSION['form']['error'] = $error;
      $_SESSION['form']['name'] = $name;
      $_SESSION['form']['email'] = $email;
      $_SESSION['form']['subject'] = $subject;
      $_SESSION['form']['message'] = $message;
      $html = $error;
    }
    // После этого мы должны сделать редирект
    header( 'Location: '.$_SERVER['PHP_SELF'] );
  }
  else // если пользователь еще не отправлял данные формы
  {
    // Если при заполнении формы были допущены ошибки - 
    // выдаем сообщение об ошибке
    if ( isset( $_SESSION['form'] ) )
    {
      $html    = $html.$_SESSION['form']['error'];
      $name    = $_SESSION['form']['name'];
      $email   = $_SESSION['form']['email'];
      $subject = $_SESSION['form']['subject'];
      $message = $_SESSION['form']['message'];
      unset( $_SESSION['form'] );
    }
    $html = $html.'<form  method="post" name="contFrm" id="contFrm" onsubmit="return jcap();" action="">
            *Контактное лицо:<br />
            <input name="name" type="text" class="box" id="name" size="30" value='.$name.'><br />
            *Email:<br />
            <input name="email" type="text" class="box" id="email" size="30" value='.$email.'><br />
            *Тема:<br />
            <input name="subject" type="text" class="box" id="subject" size="30" value='.$subject.'><br />
            *Сообщение:<br />
            <textarea name="message" cols="40" rows="3"  id="message">'.$message.'</textarea><br /><br />
            <input name="send" type="submit" class="button" id="send" value="send">
            </form>';

?>
Помогите пожалуйста... И кстати, при просмотре исходного кода через броузер, всю кирилицу пишет кракозябрами... Странно.
Андрей79 вне форума Ответить с цитированием
Старый 25.09.2011, 22:56   #2
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

пропусти свои данные в include через эту функцию
Код:
$n=mb_convert_encoding($l['name'], "UTF-8", "windows-1251");
значение внутренних полей
1. что переводить
2. во что переводить
3. и чего переводить
X@OC вне форума Ответить с цитированием
Старый 25.09.2011, 23:00   #3
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию

Цитата:
Сообщение от X@OC Посмотреть сообщение
пропусти свои данные в include через эту функцию
Код:
$n=mb_convert_encoding($l['name'], "UTF-8", "windows-1251");
значение внутренних полей
1. что переводить
2. во что переводить
3. и чего переводить
Если честно не понял, как пропустить? Не могли бы пример где вставить $n=mb_convert_encoding($l['name'], "UTF-8", "windows-1251"); ? Чайник я...
Андрей79 вне форума Ответить с цитированием
Старый 26.09.2011, 23:02   #4
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию

Все, разобрался с выводом формы. Выводит кирилицу нормально. Исправил путем пересохранения файла в нужной кодировке. А вот сообщение отправляет в кодировке UTF-8 а нужно в windows-1251, как и где перекодировать, подскажите пожалуйста
Цитата:
<?php
session_start();

echo get_content();

function get_content()
{
$html = '';

if ( isset( $_SESSION['success'] ) )
{
$html = $html.'<p>Данные формы успешно отправлены</p>';
unset( $_SESSION['success'] );
return $html;
}

$name = '';
$email = '';
$subject = '';
$message = '';

// Если данные формы были отправлены
if ( isset( $_POST['send'] ) )
{
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
// Проверям, правильно ли заполнены поля формы
$error = '';
if ( trim($name) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите Ваше имя!</div>';
if ( trim($email) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите Ваш e-mail!</div>';
else if ( !isEmail($email) )
$error = $error.'<div class="errormsg">Вы ввели некорректный e-mail address. Пожалуйста, повторите ввод!</div>';
if ( trim($subject) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите тему!</div>';
if ( trim($message) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите сообщение!</div>';
// Если форма заполнена правильно - отравляем письмо
if ( $error == '' )
{
if ( get_magic_quotes_gpc() ) $message = stripslashes($message);
$to = "andrey.platonov@bk.ru";
$subject = '[Contact Form] : ' . $subject;
$msg = "From : ".$name."\n"."e-Mail : ".$email."\n"."Subject : ".$subject."\n\n"."Message : \n".$message;
mail($to, $subject, $msg, "From: ".$email."\n"."Reply-To: ".$email."\n"."Return-Path: ".$email."\n");
$_SESSION['success'] = true;
}
else // При заполнении формы были допущены ошибки
{
$_SESSION['form'] = array();
$_SESSION['form']['error'] = $error;
$_SESSION['form']['name'] = $name;
$_SESSION['form']['email'] = $email;
$_SESSION['form']['subject'] = $subject;
$_SESSION['form']['message'] = $message;
$html = $error;
}
// После этого мы должны сделать редирект
header( 'Location: '.$_SERVER['PHP_SELF'] );
}
else // если пользователь еще не отправлял данные формы
{
// Если при заполнении формы были допущены ошибки -
// выдаем сообщение об ошибке
if ( isset( $_SESSION['form'] ) )
{
$html = $html.$_SESSION['form']['error'];
$name = $_SESSION['form']['name'];
$email = $_SESSION['form']['email'];
$subject = $_SESSION['form']['subject'];
$message = $_SESSION['form']['message'];
unset( $_SESSION['form'] );
}
$html = $html.'<form method="post" name="contFrm" id="contFrm" onsubmit="return jcap();" action="">
*Контактное лицо:<br />
<input name="name" type="text" class="box" id="name" size="30" value='.$name.'><br />
*Email:<br />
<input name="email" type="text" class="box" id="email" size="30" value='.$email.'><br />
*Тема:<br />
<input name="subject" type="text" class="box" id="subject" size="30" value='.$subject.'><br />
*Сообщение:<br />
<textarea name="message" cols="40" rows="3" id="message">'.$message.'</textarea><br /><br />
<input name="send" type="submit" class="button" id="send" value="отправить">
</form>';

}

return $html;
}

function isEmail($email)
{
return preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email );
}
?>
Андрей79 вне форума Ответить с цитированием
Старый 26.09.2011, 23:15   #5
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

попробуйте так
после того как получили данные

Код:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
пропускаем их через функцию
делаем из UTF-8 в windows-1251
Код:
$n=mb_convert_encoding($name, "windows-1251", "UTF-8");
$e=mb_convert_encoding($email, "windows-1251", "UTF-8");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "UTF-8");
X@OC вне форума Ответить с цитированием
Старый 26.09.2011, 23:29   #6
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию

Цитата:
Сообщение от X@OC Посмотреть сообщение
попробуйте так
после того как получили данные

Код:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
пропускаем их через функцию
делаем из UTF-8 в windows-1251
Код:
$n=mb_convert_encoding($name, "windows-1251", "UTF-8");
$e=mb_convert_encoding($email, "windows-1251", "UTF-8");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "UTF-8");
Вставил перекодировку, не помогает. Все по прежнему.... В коде это выглядит так
Цитата:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$n=mb_convert_encoding($name, "windows-1251", "UTF-8");
$e=mb_convert_encoding($email, "windows-1251", "UTF-8");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "UTF-8");
я правильно прописал код?
Андрей79 вне форума Ответить с цитированием
Старый 26.09.2011, 23:35   #7
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

это у вас страница вывода информации ил ввода??
если ввода
то ставьте перекодировку на странице где происходит вывод

да еще вы здесь меняли значение value
Код:

*Контактное лицо:<br />
<input name="name" type="text" class="box" id="name" size="30" value='.$n.'><br />
*Email:<br />
<input name="email" type="text" class="box" id="email" size="30" value='.$e.'><br />
*Тема:<br />
<input name="subject" type="text" class="box" id="subject" size="30" value='.$s.'><br />
*Сообщение:<br />
<textarea name="message" cols="40" rows="3" id="message">'.$m.'</textarea><br /><br />
<input name="send" type="submit" class="button" id="send" value="отправить">
</form>';

Последний раз редактировалось X@OC; 26.09.2011 в 23:39.
X@OC вне форума Ответить с цитированием
Старый 27.09.2011, 21:36   #8
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию

Цитата:
Сообщение от X@OC Посмотреть сообщение
это у вас страница вывода информации ил ввода??
если ввода
то ставьте перекодировку на странице где происходит вывод

да еще вы здесь меняли значение value
Код:

*Контактное лицо:<br />
<input name="name" type="text" class="box" id="name" size="30" value='.$n.'><br />
*Email:<br />
<input name="email" type="text" class="box" id="email" size="30" value='.$e.'><br />
*Тема:<br />
<input name="subject" type="text" class="box" id="subject" size="30" value='.$s.'><br />
*Сообщение:<br />
<textarea name="message" cols="40" rows="3" id="message">'.$m.'</textarea><br /><br />
<input name="send" type="submit" class="button" id="send" value="отправить">
</form>';

Это страница ввода, форма отправляет данные на почту. Код подправил (поменял значение value в форме, но безрезультатно. Ниже привожу свой код, исправленный согласно ваших советов
Код:
<?php
session_start();

echo get_content();

function get_content()
{
$html = '';

if ( isset( $_SESSION['success'] ) )
{
$html = $html.'<p>Данные формы успешно отправлены</p>';
unset( $_SESSION['success'] );
return $html;
}

$name = '';
$email = '';
$subject = '';
$message = '';

// Если данные формы были отправлены
if ( isset( $_POST['send'] ) )
{
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$n=mb_convert_encoding($name, "windows-1251", "windows-1251");
$e=mb_convert_encoding($email, "windows-1251", "windows-1251");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "windows-1251");

// Проверям, правильно ли заполнены поля формы
$error = '';
if ( trim($name) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите Ваше имя!</div>';
if ( trim($email) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите Ваш e-mail!</div>';
else if ( !isEmail($email) )
$error = $error.'<div class="errormsg">Вы ввели некорректный e-mail address. Пожалуйста, повторите ввод!</div>';
if ( trim($subject) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите тему!</div>';
if ( trim($message) == '' )
$error = $error.'<div class="errormsg">Пожалуйста, введите сообщение!</div>';
// Если форма заполнена правильно - отравляем письмо
if ( $error == '' )
{
if ( get_magic_quotes_gpc() ) $message = stripslashes($message);
$to = "andrey.platonov@bk.ru";
$subject = 'Письмо с сайта: ' . $subject;
$msg = "От: ".$name."\n"."e-Mail : ".$email."\n"."Тема: ".$subject."\n\n"."Сообщение: \n".$message;
mail($to, $subject, $msg, "From: ".$email."\n"."Reply-To: ".$email."\n"."Return-Path: ".$email."\n");
$_SESSION['success'] = true;
}
else // При заполнении формы были допущены ошибки
{
$_SESSION['form'] = array();
$_SESSION['form']['error'] = $error;
$_SESSION['form']['name'] = $name;
$_SESSION['form']['email'] = $email;
$_SESSION['form']['subject'] = $subject;
$_SESSION['form']['message'] = $message;
$html = $error;
}
// После этого мы должны сделать редирект
header( 'Location: '.$_SERVER['PHP_SELF'] );
}
else // если пользователь еще не отправлял данные формы
{
// Если при заполнении формы были допущены ошибки -
// выдаем сообщение об ошибке
if ( isset( $_SESSION['form'] ) )
{
$html = $html.$_SESSION['form']['error'];
$name = $_SESSION['form']['name'];
$email = $_SESSION['form']['email'];
$subject = $_SESSION['form']['subject'];
$message = $_SESSION['form']['message'];
unset( $_SESSION['form'] );
}
$html = $html.'<form method="post" name="contFrm" id="contFrm" onsubmit="return jcap();" action="">
*Контактное лицо:<br />
<input name="name" type="text" class="box" id="name" size="30" value='.$n.'><br />
*Email:<br />
<input name="email" type="text" class="box" id="email" size="30" value='.$e.'><br />
*Тема:<br />
<input name="subject" type="text" class="box" id="subject" size="30" value='.$s.'><br />
*Сообщение:<br />
<textarea name="message" cols="40" rows="3" id="message">'.$m.'</textarea><br /><br />
<input name="send" type="submit" class="button" id="send" value="отправить">
</form>';

}

return $html;
}

function isEmail($email)
{
return preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email );
}
?>
Андрей79 вне форума Ответить с цитированием
Старый 27.09.2011, 22:36   #9
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

это что такое?
Цитата:
$n=mb_convert_encoding($name, "windows-1251", "windows-1251");
$e=mb_convert_encoding($email, "windows-1251", "windows-1251");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "windows-1251");

должно быть так
$n=mb_convert_encoding($name, "windows-1251", "UTF-8"");
$e=mb_convert_encoding($email, "windows-1251", "UTF-8"");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "UTF-8"");

проверьте на всякий случай так
$n=mb_convert_encoding($name, "UTF-8", "windows-1251");
$e=mb_convert_encoding($email, "UTF-8", "windows-1251");
$s=mb_convert_encoding($subject , "UTF-8", "windows-1251");
$m=mb_convert_encoding($message , "UTF-8", "windows-1251");
вот еще измените, там где едет отправка данных на почту
Код:
if ( get_magic_quotes_gpc() ) $m = stripslashes($m);
$to = "andrey.platonov@bk.ru";
$s= 'Письмо с сайта: ' . $s;
$msg = "От: ".$n."\n"."e-Mail : ".$e."\n"."Тема: ".$s."\n\n"."Сообщение: \n".$m;
mail($to, $s, $msg, "From: ".$e."\n"."Reply-To: ".$e."\n"."Return-Path: ".$e."\n");
$_SESSION['success'] = true;
скажите потом результат OK

Последний раз редактировалось X@OC; 27.09.2011 в 22:41.
X@OC вне форума Ответить с цитированием
Старый 29.09.2011, 22:56   #10
Андрей79
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 63
По умолчанию

Цитата:
это что такое?
Цитата:
$n=mb_convert_encoding($name, "windows-1251", "windows-1251");
$e=mb_convert_encoding($email, "windows-1251", "windows-1251");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "windows-1251");
Извините, это я экспериментировал...
В общем добился чтобы письмо приходило на кирилице, вставив:
Код:
$n=mb_convert_encoding($name, "windows-1251", "UTF-8");
$e=mb_convert_encoding($email, "windows-1251", "UTF-8");
$s=mb_convert_encoding($subject , "windows-1251", "UTF-8");
$m=mb_convert_encoding($message , "windows-1251", "UTF-8");
Код:
if ( get_magic_quotes_gpc() ) $m = stripslashes($m);
$to = "andrey.platonov@bk.ru";
$s= 'Письмо с сайта: ' . $s;
$msg = "От: ".$n."\n"."e-Mail : ".$e."\n"."Тема: ".$s."\n\n"."Сообщение: \n".$m;
mail($to, $s, $msg, "From: ".$e."\n"."Reply-To: ".$e."\n"."Return-Path: ".$e."\n");
$_SESSION['success'] = true;
и
Код:
*Контактное лицо:<br />
<input name="name" type="text" class="box" id="name" size="30" value='.$n.'><br />
*Email:<br />
<input name="email" type="text" class="box" id="email" size="30" value='.$e.'><br />
*Тема:<br />
<input name="subject" type="text" class="box" id="subject" size="30" value='.$s.'><br />
*Сообщение:<br />
<textarea name="message" cols="40" rows="3" id="message">'.$m.'</textarea><br /><br />
<input name="send" type="submit" class="button" id="send" value="отправить">
</form>';
При этом тема письма, поля "имя", "сообщение" приходят иероглифами.
Сделал еще проще, без Ваших изменений, просто добавил в форму
Код:
accept-charset="windows-1251"
и также текст письма приходит кирилицей. Но название полей "имя", "тема", "сообщение" - приходят все также в кракозябрах. Выход - пишу название полейц на латинице...
Спасибо за помощь, буду рыться дальше, может что получится.
Андрей79 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в кодировке asnikifor PHP 7 23.09.2011 22:44
Ошибка в кодировке? SomeName Microsoft Office Word 0 13.04.2011 08:47
Вопрос о кодировке. vedro-compota PHP 16 29.09.2010 17:48
запутался! mistertvister Помощь студентам 3 28.10.2009 14:52