Не работает форма с кирилицей

Discussion in 'PHP' started by serg-php, 9 Aug 2008.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Есть проблема в отпрвке юзверями комментов!

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

    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>
    
     
  2. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Файл обработки формы

    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);

    ?>
     
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Проблема следующая, если ввожу все латиницей - работает!


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

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

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

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    форма не работает с кириллицей...
    Может попробовать в мета-заголовок вбить тип кодировки, и в обработчике iconv() заюзать?
     
    2 people like this.
  5. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Так в форме есть
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    Или это совсем другое?
     
  6. AdReNa1!Ne

    AdReNa1!Ne Elder - Старейшина

    Joined:
    24 May 2007
    Messages:
    70
    Likes Received:
    105
    Reputations:
    14
    Это оно. Короч остается попробовать iconv() в обработчике.
     
  7. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    В js загоняй в base64, в php делай iconv