Help! Скрипт не понимает Post запрос на кириллице!

Тема в разделе "Perl программирование", создана пользователем gromadaigor, 8 ноя 2008.

  1. gromadaigor

    gromadaigor Гость

    Привет всем! Скачал в буржунете скрипт автореспондера (автоматическая почтовая рассылка). Работает хорошо. Письма приходят на кириллице, но вот при введении в форму подписки имени пользователя на кириллице выдает ошибку: "Все поля обязательны для заполнения!". Такое впечатление что он вообще кириллицу не видит (или на ходу преобразовывает все буквы в пробелы). ПОМОГИТЕ ПОЖАЛУЙСТА!
    Скрипт можно взять в приложеном архиве.
     

    Вложения:

    • sw_aresp15.zip
      Размер файла:
      41,8 КБ
      Просмотров:
      14
  2. Vovochka

    Vovochka Гость

    Честно скачал, честно открыл и так же честно закрыл.
    С таким объмом да без наводок работать однозначно не хочется.

    Но дам вам совет:
    Сделайте поиск по фразе, выдаваемой при неправильном вводе.
    Так возможно вам удастся найти место проверки вводимых значений, а дальше все просто. :rolleyes:
     
  3. gromadaigor

    gromadaigor Гость

    И по фразе ошибки искал, и по имени поля формы в которое вбивается кириллическое значение. Нашел место где скрипт обрабатывае данные формы, но так как в программировании не силен и нагуглить ничего не удалось, то дальше дело не зашло. Ниже приведу свои соображения:

    Вот форма для ввода :

    [codebox]<form method="POST" action="http://www.my-domain.ru/cgi-bin/aresp15/swars.cgi">
    <input type="hidden" name="mode" value="register"><input type="hidden" name="ar" value=earn>
    <div align="center"><center><table border="1" >
    <tr><td >Имя:</td><td> <input type="text" name="user" size="20"></td></tr><tr><td >
    <font face="Tahoma" size="2">Email:</font></td><td>
    <input type="text" name="email" size="20"> </td></tr><tr><td align="right" colspan="2">
    <div > <p>
    <input type="submit" value="Subscribe" name="B1"> </td></tr></table> </div>
    </form>[/codebox]

    Тут, в файле swars.cgi, скрипт обрабатывае данные формы:

    [codebox]@pairs = split(/&/, $input);
    foreach $pair (@pairs) {($name, $value) = split(/=/, $pair);

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/\n/ /g;
    $FORM{$name} = $value;[/codebox]

    А вот код ошибки если имя подписчика вбивать на кириллице:

    [codebox]sendmail($FORM{'email'},$subject,$body,$FORM{'ar'},$ftoattach,1,$FORM{'user'});
    } else {error "Both fields are required!"};[/codebox]


    Посмотрите пожалуйста что можно сделать. Заранеее большое спасибо!
     
  4. Vovochka

    Vovochka Гость

    Код (Text):
    $FORM{'user'}=~/^\s*(\w{1,20})\s*(\w{0,20}).*$/;
    my($sec)=$2;
    if ($sec ne ""){$sec=" \u$sec"};
    $FORM{'user'}="\u$1$sec";
    Смысл в этих строках.
    А точнее в этой.
    $FORM{'user'}=~/^\s*(\w{1,20})\s*(\w{0,20}).*$/;

    Потом скажу на что заменить. Сейчас просто нет времени.
     
  5. Vovochka

    Vovochka Гость

    Можешь заменить на:
    $FORM{'user'}=~/^\s*(\S{1,20})\s*(\S{0,20}).*$/;

    Но тогда в имя, фамилия могут быть внесены любые не пробельные символы.
     
  6. gromadaigor

    gromadaigor Гость

    Спасибо за совет. Заменил, но все осталось как было. Например, если ввожу в форму кириллические символы вместе с латинскими то скрипт "запоминает" только латинские. Как я уже говорил, как будто заменяет их на пробелы.
    Подскажите пожалуйста по каким ключевым словам поискать информацию в гугле.
     
  7. Vovochka

    Vovochka Гость

    Гуглить на тему регулярных выражений.

    Объясню смысл этого регулярного выражения (то что /"выражение"/ ):
    ^ - Символ, обозначающий начало строки.
    \s* - Любое количество пробельных символов (в том числе и нулевое).
    \w{1,20} - От 1 до 20 , так сказать, символьных символов (включают в себя латиницу, цифры и еще несколько симовол типа "-", "_" и т. д.)
    () - скобки, группировка. То что заключено в скобки потом будет доступно через определенные переменные.
    Я предложил:
    \S{1,20} - Это любые не проблельные символы. Так же от 1 до 20.

    Так что работать должно. Может это не тот кусок кода? Поищите еще такие куски :)
     
  8. gromadaigor

    gromadaigor Гость

    Спасибо за разъяснения! Будем искать нужные куски :)

    Ха-ха! Искать пришлось не долго. В скрипте три таких строки. Заменил все. Теперь все работает, даже если имя с пробелами :). Большое спасибо Vovochka за помощь!
     
Загрузка...

Поделиться этой страницей