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

  • Автор темы gromadaigor
  • Дата начала
G

gromadaigor

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

Вложения

V

Vovochka

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

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

gromadaigor

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

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

[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]


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

Vovochka

#4
Код:
$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}).*$/;

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

Vovochka

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

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

gromadaigor

#6
Можешь заменить на:
$FORM{'user'}=~/^\s*(\S{1,20})\s*(\S{0,20}).*$/;
Спасибо за совет. Заменил, но все осталось как было. Например, если ввожу в форму кириллические символы вместе с латинскими то скрипт "запоминает" только латинские. Как я уже говорил, как будто заменяет их на пробелы.
Подскажите пожалуйста по каким ключевым словам поискать информацию в гугле.
 
V

Vovochka

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

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

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

gromadaigor

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

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