PDA

Просмотр полной версии : Не работает форма с кирилицей


serg-php
09.08.2008, 15:47
Есть проблема в отпрвке юзверями комментов!

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

<!-- 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



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_v, 1);

$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_v, 1);

?>

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 (http://php.net/iconv)