Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Не работает форма с кирилицей (https://forum.antichat.xyz/showthread.php?t=80259)

serg-php 09.08.2008 15:47

Не работает форма с кирилицей
 
Есть проблема в отпрвке юзверями комментов!

Шаблон формы следуюющий:

Код HTML:

<!-- TITLE: Обратная связь -->

<script LANGUAGE="JavaScript">
<!--

function validate() {

var error = "";
var f = document.frm;

if (f.name.value == "") {
  error += "Пожалуйста, введите Ваше имя.\n";
}
if(f.email.value.indexOf(".")<1 || f.email.value.indexOf("@") < 1) {
  error += "Пожалуйста, введите email.\n";
  f.email.focus();
}
if (f.comments.value == "") {
  error += "Пожалуйста, введите сообщение до 1000 символов.\n";
}

  if (!error) return true;
  else{
    msg = "Oops! С формой отправки проблемы.\n\n" + error;
    window.alert(msg);
    return false;
  }
}

function CommentsChange(){
  var f = document.frm;
  txtCount(f.comments,f.commentsleft,1000);
}

// -->

</script>

<p>Обратная связь<br><br>

Поля жирным обязательны</p>

<form name=frm method="POST" onSubmit="return validate();">

<input type=hidden name=page value="feedback">

<span class=red>##err_msg##</span>

<p>

<table border=0 cellspacing=0 cellpadding=0 width=415 class=shownot>

<tr><td align="right" valign="top"><b>Имя:</b>&nbsp;&nbsp;</td>

<td><input name=name value="##name##" size="30"></td></tr>


<tr><td>&nbsp;</td><td>&nbsp;Ваше имя полностью.</td></tr>

<tr><td colspan=2>&nbsp;</td></tr>

<tr><td align="right" valign="top"><b>Email:</b>&nbsp;&nbsp;</td>

  <td><input name=email value="##email##" size=30 /></td>
</tr>


<tr><td>&nbsp;</td><td>&nbsp;Email, на который нам прислатьответ</td></tr>

<tr><td colspan=2>&nbsp;</td></tr>

<tr><td align="right" valign="top">Ваш сайт:&nbsp;&nbsp;</td>
<td><input name=url value="##url##" size=30></td></tr>
<tr><td>&nbsp;</td><td>&nbsp;Адрес Вашего сайта (выборочно)</td></tr>

<tr><td colspan=2>&nbsp;</td></tr>


<tr><td align="right" valign="top">Нашли нас:&nbsp;&nbsp;</td>
<td><input name=foundus value="##foundus##" size=30></td></tr>
<tr><td>&nbsp;</td><td>&nbsp;Как Вы нас нашли?  (выборочно)</td></tr>

<tr><td colspan=2>&nbsp;</td></tr>


<tr><td align="right" valign="top"><b>Сообщение:</b>&nbsp;&nbsp;</td>
<td><textarea wrap="virtual" name=comments rows=7 cols=40 onKeyDown="CommentsChange()" onKeyUp="CommentsChange()">##comments##</textarea></td></tr>

<tr><td>&nbsp;</td><td>&nbsp;Ваше сообщение,
<input readonly type=text name=commentsleft size=3 maxlength=4 value="1000" tabindex=5000>
 символов осталось</td></tr>

<tr><td colspan=2>

<!-- IF ##EN_IMG_VER## -->

<table border=0>
<tr bgcolor="#ffffff">
<td colspan=3 class=blck>
Мера предосторожности: <br>
Введите символы, которые видите на картинке!</td>
</tr>

<tr bgcolor="#ffffff">
<td class=blck>Проверочный код:</td>
<td colspan=2>

<table border=0>
<tr>
<td>
<input name="img_text" size=10></td>
<td>
<img src="index.php?page=feedback&mode=image"></td>
</tr>
</table></td>
</tr>
</table>
<!-- ENDIF -->

</td></tr>

<tr><td colspan=2 align=center><br />


<table width="100%">
<tr><td class=blck>
<center>
<center><input type=submit class=button value="Отправить"></a></center></td></tr></table>

</td></tr>
</table>

</form>

<script>
CommentsChange();
</script>


serg-php 09.08.2008 15:50

Файл обработки формы

PHP код:

<?php



if(!defined('SITE_PATH')) die('Access Denied');

$EN_IMG_VER 1;

// main code

// is GD library present ?
if(!GD_VER$EN_IMG_VER 0;

if(
$_GET['mode']=='image'){
  if(
$EN_IMG_VER) {
    
$o_iv =& Factory::create('Image_Verify');
    
$o_iv->DisplayImage();
  }
  exit;
}

 
$whitelist = array(
   
'name' => array(
     
'type' => 'string',
     
'maxlength' => 100,
   ),
   
'email' => array(
     
'type' => 'email',
     
'maxlength' => 100,
   ),
   
'url' => array(
     
'type' => 'string',
     
'maxlength' => 100,
   ),
   
'foundus' => array(
     
'type' => 'string',
     
'maxlength' => 100,
   ),
   
'comments' => array(
     
'type' => 'print_ws',
     
'maxlength' => 1000,
   ),
 );

$err_msg '';
$tpl_v = array();
$tpl_v['EN_IMG_VER'] = $EN_IMG_VER;

if(
$_SERVER['REQUEST_METHOD']=='POST') {

  
$clean esFilter($_POST$whitelist);

  if(!
$clean['email']) $err_msg hwLng('req_email');
  elseif(!
$clean['comments']) $err_msg hwLng('req_comments');

  if(!
$err_msg && $EN_IMG_VER){
    
$o_iv =& Factory::create('Image_Verify');
    if(!
$o_iv->IsTextOK($_POST['img_text'])) $err_msg hwLng('err_img_code');
  }

  if(!
$err_msg){

    foreach(
array_keys($whitelist) as $k$tpl_v[$k] = htmlspecialchars($clean[$k], ENT_QUOTES$GLOBALS['CHARSET']);

    
EvalAdvTpl(TPL_PATH.'feedback_ok.htm'$tpl_v1);

    
$tpl_v['HTTP_REFERER'] = htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_QUOTES$GLOBALS['CHARSET']);
    
$email_body EvalAdvTpl(TPL_PATH.'feedback.mail',$tpl_v);
    
hwSendMail(ADMIN_EMAIL$tpl_v['email'], ''$email_body);

    return;
  }
  
//end POST

foreach(array_keys($whitelist) as $k$tpl_v[$k] = isset($_POST[$k]) ? htmlspecialchars($_POST[$k], ENT_QUOTES$GLOBALS['CHARSET']) : '';
$tpl_v['err_msg'] = $err_msg;

EvalAdvTpl(TPL_PATH.'feedback.htm'$tpl_v1);

?>


serg-php 09.08.2008 15:52

Проблема следующая, если ввожу все латиницей - работает!


Пишу по русски - ответ об ошибке - Введите Ваше сообщение

Т.е. он говори, что в поле comments - я ничего не писал!

Как решить данную проблему?
Заранее спасибо!

AdReNa1!Ne 09.08.2008 21:34

форма не работает с кириллицей...
Может попробовать в мета-заголовок вбить тип кодировки, и в обработчике iconv() заюзать?

serg-php 09.08.2008 23:22

Так в форме есть
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Или это совсем другое?

AdReNa1!Ne 09.08.2008 23:45

Это оно. Короч остается попробовать iconv() в обработчике.

Isis 10.08.2008 17:40

В js загоняй в base64, в php делай iconv


Время: 03:50