Компьютерный форум NoWa.cc

Компьютерный форум NoWa.cc (https://nowa.cc/index.php)
-   Perl (https://nowa.cc/forumdisplay.php?f=306)
-   -   Помогите кто может! (https://nowa.cc/showthread.php?t=94078)

proparket 05.05.2007 18:32

Помогите кто может!
 
Я делал простую форму заказа тура со страницы сайта (его еще нет). С формой получилось все ОК, а вот скрипт перла, который правильно отправляет данные из форм на email владельца хромает на все четыре. Нет все из форм он отправляет и прописывает и дату и IP клиента (или какого спамера), а вот письмо присылается с кракозябрами в месте "ОТ КОГО" у которых на конце добавлено еще и /@ххххх.ru/ (последнее ххххх.ru это мой хостер). Заметно, что собрана из кусков да и еще и с ошибками.
Может кто более умный посмотрел бы сей опус. А?
================================================== ========

#!/usr/bin/perl

$mailprog = '/usr/lib/sendmail';
$thank_url = 'http://хххххххххххх.ru/thankyou.htm';
$archivefile = 'contact.txt';
$toname = 'Для хххххххх заказ';
$tomail = 'ххххххх@rambler.ru';
$subject = 'Клиент пришел с сайта ххххххххх';

@months = ("Января","Февраля","Марта","Апреля","Мая","Июн я",
"Июля","Августа","Сентября","Октября","Ноября" ,"Де кабря");
$at = "в";

$timeoffset = +4;
$timezone = '(время московское)';

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

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

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st) = gmtime(time+$timeoffset*3600);
$time = sprintf("%02d:%02d",$hour,$min);
$year += 1900;
$date = "$mday $months[$mon] $year $at $time $timezone";


open(HANDLE,"|$mailprog -t") || die "Не возможно открыть $mailprog!\n";
&send_message;
close(HANDLE);

open(HANDLE, ">>$archivefile") || die "Не возможно открыть архив для записи: $!";
&send_message;
print HANDLE "\n=======================================\n\n ";
close(HANDLE);

print "Location: $thank_url\n\n";;

sub send_message {
print HANDLE "To: $toname <$tomail>\n";
print HANDLE "From: $FORM{'name'}\n";
print HANDLE "Тема письма: $subject\n";
print HANDLE "$date\n";
print HANDLE "Это сообщение пришло со страницы $ENV{'HTTP_REFERER'}.\n";
print HANDLE "IP адрес пользователя: $ENV{'REMOTE_ADDR'}\n\n";
print HANDLE "Этот клиент хочет: $FORM{'tur'}\n";
print HANDLE "В какой стране: $FORM{'strana'}\n";
print HANDLE "Мои координаты: $FORM{'contact'}\n";
print HANDLE "\n ==========Дополнительные пожелания==========\n";
print HANDLE "$FORM{'message'}\n";
print HANDLE "$FORM{'name'}";
print HANDLE "\n ================Конец заказа================\n";
}

lesto 05.06.2007 01:19

Ответ: Помогите кто может!
 
У тебя проблемы с кирилицей будь она не ладная. Советую зайти в соседнюю тему и там спросить:
http://www.nowa.cc/showthread.php?t=98175

Il_Burbero 05.06.2007 08:52

Ответ: Помогите кто может!
 
FAQ на странице хостера есть? Читал? :)
Цитата:

Для того чтобы сервер выдавал кодировку документа в http-заголовке (это рекомендует делать yandex.ru для корректного индексирования), вам необходимо добавить в файл .htaccess следующюю строчку:
AddDefaultCharset windows-1251
либо
AddDefaultCharset koi8-r
- в зависимости от кодировки сайта.
Это может помочь напрячь ВСЕХ на нужную кодировку, браузеры будут открыватся только в ОДНОЙ кодировке, даже если юсер поставил себе по умолчанию китайскую. Ну или сразу показывать ему кракозябры если юсер упертый и у него нет автоматической кодировки в браузере и тупо выставлена вьетнамская стандартная.

Форма допустим у тебя win1251 а скрипт (или сервак) держит КОИ в итоге ты ясен пень при обработке получишь кракозябры (если нет автодетекта кодировки и перекодировки на лету).

А да и чем посылает скрипт в Content-Type: text/html; charset="??????????"
По моему копатся здесь и надо, по моему все должно совпадать: charset на форме, charset в скрипте (default charset на сервере) интерпретатора и ессно charset в теле письма.

Cделай генератор хтмл письма, увы я в CGI не силен, помочь не могу, иначе пользовтель будет обречен постоянно менять кодировки в почтовом клиенте. Кстати ХТМЛ письмо и выглядит покрасивше да и юсеров кто сидит на текстовых е-майл клиентах я думаю среди заказчиков туров вряд ли будет много (если будет вообще).

nigat 03.10.2007 10:24

Ответ: Помогите кто может!
 
--------------------------------------------------------------------------------

Perl book http://rapidshare.com/files/59919048/perl.pdf

chorny 28.12.2007 22:28

Ответ: Помогите кто может!
 
Использовать модули CGI (или аналогичные попроще) и MIME::Lite. Тогда программа сильно упрощается. А вообще - надо в заголовках письма проставлять кодировку. И сама программа должна быть в правильной кодировке.

Walkman55 13.02.2009 13:32

Re: Помогите кто может!
 
???? ??????? ?? ???? ??????? ????? ????!!!!!!

Slava0008 07.05.2010 12:52

Re: Помогите кто может!
 
Примерно так:

use Encode qw/encode decode/;
my $val = encode("CP1251", decode("UTF-8", "Текст из поля формы"));


Текущее время: 20:28. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2026 NoWa.cc

Время генерации страницы 0.02373 секунды с 9 запросами