Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форма обратной связи на сайте, Отсылка введенных в форму данных в utf  
V
    Опции темы
Blanka
Дата 15.12.2013, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Помогите, пожалуйста, с возможным решением проблемы.
Нужен скрипт на Перл для формы обратной связи, корректно (в правильной кодировке, без аброкодабр) отсылающий данные из формы из разных броузеров.
Сайт в utf-8.


PM MAIL   Вверх
Bulat
Дата 15.12.2013, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(Blanka @  15.12.2013,  14:09 Найти цитируемый пост)
отсылающий данные

куда отсылающий??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Blanka
Дата 17.12.2013, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



При переходе сайта на utf-8. Текст сообщения присылаемого на электронную почту из формы обратной связи стал нечитабельным. Я бы хотела найти решения этого вопроса. 
PM MAIL   Вверх
Bulat
Дата 17.12.2013, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Blanka, а может код какой выложишь?


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Blanka
Дата 17.12.2013, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Код

#!/usr/bin/perl

use CGI;

use CGI::Carp;

$query = new CGI;

use Encode;

&print_page_start;
&validate_form;
&test_code;
&send_mail;
&print_page;
&print_page_end;

sub print_page_start {
    print "Content-type: text/html; charset=utf-8\n\n";
    print "<HTML>\n<HEAD>\n";
    print "<meta charset=\"UTF-8\">";
    print "<TITLE> спасибо за интерес к нашей мебели</TITLE>\n";
    print "</HEAD>\n";
    print "<style type=\"text/css\">\n<!--\n";
    print "td {font-family: Arial; color: #160a16;";
    print "font-size:11px}\n";
    print "a:active {font-family: Arial; color: #af45c5; text-decoration: none;";
    print "font-size:11px}\n";
    print "a:link {font-family: Arial; color: #af45c5; text-decoration: none;";
    print "font-size:11px }\n";
    print "a:visited {font-family: Arial; color: #af45c5; text-decoration: none;";
    print "font-size:11px }\n";
    print "a:hover {font-family: Arial; color: #af45c5; text-decoration: underline;";
    print "font-size:11px}\n";
    print "//-->\n</style>\n<BODY>\n";
}

sub print_page_end  {
    print "</BODY>\n</HTML>\n";
}

sub validate_form  {
    $n1 = $query->param('n1');
    $n2 = $query->param('n2');
    $n3 = $query->param('n3');
    $ar = $query->param('ar');
    $kod = $query->param('kod');
}

sub test_code  {
    if ($query->param('kod') ne "fl372")  {
    &spam_error;
    }
}

sub send_mail  {
open (MAIL, "| /usr/sbin/sendmail -t");
print MAIL "From: xxx\@xxx.ru\n";
print MAIL "To: xxx\@xxxl.ru\n";
print MAIL "Subject: Оставлен контакт от клиента с сайта \n\n";
print MAIL "Фамилие, имя, отчество - $n1\n";
print MAIL "E-mail - $n2\n";
print MAIL "Телефон - $n3\n";
print MAIL "Ваше сообщение - $ar\n";
close MAIL;
}

sub print_page  {
    print "<TABLE border=\"1\" bordercolor=\"#160a16\" cellpadding=\"30\" cellspacing=\"0\"><TR><TD>\n";
    print "Спасибо за вопрос. <br />Проверьте, пожалуйста, Ваши контактные данные и текст вопроса:<br /><br />\n";
    print "Фамилия, имя, отчество: " . $query->param('n1') . "<br>\n";
    print "E-mail: " . $query->param('n2') . "<BR>\n";
    print "Телефон: " . $query->param('n3') . "<BR>\n";
    print "Ваше сообщение: " . $query->param('ar') . "<BR><BR>\n";
    print "<A HREF=\"http://www.xxx.ru\">вернуться на главную страницу </A>";
    print "</TD></TR></TABLE>";
}

# Ошибка введенного кода
sub spam_error  {
    print "<html><head><title>Ошибка введенного кода</title></head>\n";
    print "<BODY><FONT color=\"#ff0000\"><h4>Ошибка введенного кода</h4></FONT>";
    print "<FONT color=\"#000000\">Введите, пожалуйста, ";
    print "символы изображенные на рисунке!\n";
    print "<FORM ACTION=\"http://www.xxx.ru/cgi-bin/email.pl\">\n";
    print "Фамилия, имя, отчество: <INPUT TYPE=\"TEXT\" SIZE=\"53\" name=\"n1\"";
    print "value=\"" . $query->param('n1') . "\"><br><br>\n";
    print "E-mail: <INPUT TYPE=\"TEXT\" SIZE=\"26\" name=\"n2\""; 
    print "value=\"" . $query->param('n2') . "\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Телефон:";
    print " <INPUT TYPE=\"TEXT\" SIZE=\"27\" name=\"n3\" value=\"" . $query->param('n3') . "\"><br><br>\n";
    print "<input type=hidden name=\"ar\" ";
    print "value=\"" . $query->param('ar') . "\">\n";
    print "<img src=\"http://www.xxx.ru/pict1.gif\" width=75 height=25 border=1><br>\n";
    print "<input type=text name=\"kod\" value=\"" . $query->param('kod') . "\" size=9><P>";
    print "<input type=\"submit\" name=\"submit\" value=\"Отправить\"> ";
    print "<input type=\"reset\" name=\"reset\" value=\"Очистить\"></form><hr>\n";
    print "<A HREF=\"http://www.xxx.ru\">вернуться на главную страницу </A>";
    print "\n</FONT></BODY>\n</HTML>\n";
   exit;
}


Добавлено @ 14:26
код типовой ничего особенного.

На html-страницу все выводится корректно. Заголовок письма "Оставлен контакт от клиента с сайта", тоже на нормальном русском, а текст сообщения УВЫ!!

Это сообщение отредактировал(а) Blanka - 17.12.2013, 14:35
PM MAIL   Вверх
noize
Дата 17.12.2013, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.7.2010
Где: СПб

Репутация: нет
Всего: 3



вы, я смотрю, любите рисковать - код пишете без strict'ов и warnings'ов
PM MAIL   Вверх
Blanka
  Дата 17.12.2013, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Это как?

Добавлено через 2 минуты и 47 секунд
Код написан лет 10 назад. Я сейчас немного другими вопросами занимаюсь, поэтому в программировании меня можно сейчас назвать Чайником... Очень буду признательна, если укажите на недостатки...
PM MAIL   Вверх
noize
Дата 17.12.2013, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.7.2010
Где: СПб

Репутация: нет
Всего: 3



добавьте в код вот это:
Код

use strict;
use warnings;

и от этого уже пляшите
PM MAIL   Вверх
alezzz
Дата 17.12.2013, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 2
Всего: 14



Цитата(noize @  17.12.2013,  15:49 Найти цитируемый пост)
добавьте в код вот это:код Perl1:2:use strict;use warnings;

хороший универсальный совет, подходит под любую проблему если в начале кода нет этих строчек smile.
 
Blanka

&send_mail; переместите за &print_page_end;
перед open MAIL попробуйте для всех переменных ($n1, $ar...) перебрать такие варианты:
Encode::_utf8_on($n1);
или
Encode::_utf8_off($n1);

Sendmail-ом не отсылал, может у него какая неприязнь к utf или в какой он там кодировке отправляет по умолчанию. У меня работает автоматическая отправка через связку mutt - ssmtp, с utf были проблемы, но решались.
PM MAIL   Вверх
Blanka
  Дата 17.12.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Спасибо. Можно, конечно, добавить. Правда программа элементарная

Добавлено через 2 минуты и 25 секунд
alezzz, тоже спасибо. Попытаюсь сделать, как Вы рекомендуете.

PM MAIL   Вверх
Bulat
Дата 17.12.2013, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Там на самом деле мож проще перекодировать в cp1251 при отправке!


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Blanka
Дата 17.12.2013, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



alezzz, похоже действительно проблема в sendmail хостера. Перенесла файлы на другой хостинг для экспериментов над ними. 
Вопрос с нечитабельностью текста писем снялся.
Придется теперь много вопросов задавать тех. поддержке.

Добавлено через 6 минут и 55 секунд
Bulat, при отправке пробовала перекодировать accept-charset в тег form. 
Но IE на это не отреагировал, а в  остальных браузерах помогло с текстом сообщения, но стало выводить "вопросики" при выводе введенных данных на страницу. 
PM MAIL   Вверх
Bulat
Дата 17.12.2013, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(Blanka @  17.12.2013,  19:44 Найти цитируемый пост)
при отправке пробовала перекодировать accept-charset в тег form. 

Я имел ввиду в момент отправки письма, через Encode


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Blanka
Дата 17.12.2013, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Цитата(Bulat @ 17.12.2013,  20:32)
Цитата(Blanka @  17.12.2013,  19:44 Найти цитируемый пост)
при отправке пробовала перекодировать accept-charset в тег form. 

Я имел ввиду в момент отправки письма, через Encode

Поделитесь  методом, пжс.
PM MAIL   Вверх
Blanka
Дата 18.12.2013, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



И еще вопросик от чайничка.
? Можно ли в заголовок отправляемого мыла вписать что-то вроде print MAIL "Content-type: text/html; charset=utf-8"; 
PM MAIL   Вверх
Bulat
Дата 18.12.2013, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Писал по интуиции - не тестировал

Код

sub send_mail  {
  open (MAIL, "| /usr/sbin/sendmail -t");
  print MAIL "From: xxx\@xxx.ru\n";
  print MAIL "To: xxx\@xxxl.ru\n";
  print MAIL "Subject: Оставлен контакт от клиента с сайта \n\n";
  print MAIL "Фамилие, имя, отчество - ".Encode::encode('cp1251', Encode::decode('utf8',$n1))."\n";
  print MAIL "E-mail - ".Encode::encode('cp1251', Encode::decode('utf8',$n2))."\n";
  print MAIL "Телефон - ".Encode::encode('cp1251', Encode::decode('utf8',$n3))."\n";
  print MAIL "Ваше сообщение - ".Encode::encode('cp1251', Encode::decode('utf8',$ar))."\n";
  close MAIL;
}


Суть в Encode::encode('cp1251', Encode::decode('utf8',...))

Цитата(Blanka @  18.12.2013,  00:35 Найти цитируемый пост)
Можно ли в заголовок отправляемого мыла вписать что-то вроде print MAIL "Content-type: text/html; charset=utf-8";  

Можно, но это не даст того эффекта, что вы ожидаете.  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Blanka
Дата 18.12.2013, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.12.2013

Репутация: нет
Всего: нет



Хоть мне никто и не ответил... 
Но на самом деле, это помогло.
print MAIL "Content-Type: text/plain; charset=utf-8\n"; сразу после строки open (MAIL, "| /usr/sbin/sendmail -t");
Код

sub send_mail  {
open (MAIL, "| /usr/sbin/sendmail -t");
print MAIL "Content-Type: text/plain; charset=utf-8\n";
print MAIL "From: xxx\@xxx.ru\n";
print MAIL "To: xxx\@xxxl.ru\n";
print MAIL "Subject: Оставнен контакт от клиента с сайта \n\n";
print MAIL "Фамилие, имя, отчество - $n1\n";
print MAIL "E-mail - $n2\n";
print MAIL "Телефон - $n3\n";
print MAIL "Ваше сообщение - $ar\n";
close MAIL;
}

PM MAIL   Вверх
tzirechnoy
Дата 29.12.2013, 17:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: -1
Всего: 16



Цитата
print MAIL "Subject: Оставнен контакт от клиента с сайта \n\n";


Убивать сразу. Вообще, на почту и i18n в ней есть RFC, они несложно читаются (rfc2045, rfc2046, rfc2047, rfc2048, rfc2049), дополнительно для понимания общих механизмов можно просмотреть довольно муторный и пока вам неактуальный rfc2822, после прочтения стоит посмотреть в rfc-index на updates (которые для Вас тожэ не очень важны, на этом этапе).
Если не умеете читать -- то можно было хотя бы послать пример письма из известной почтовой программы самому себе, экспортировать на диск в какой-нибудь простой mbox, открыть его текстовым редактором и сделать своё в точности как там получилось.

Краткая выжымка: 

1) В заголовках письма при передаче (в т.ч. при передаче в sendmail) все символы должны быть 7-битные. Никакого utf-8 или 1251 туда печатать нельзя. Письма от людей, которые этого не понимают, получают у меня сразу 2/3 скоринга для отправки в спам (и это по-моему умолчание в спамассасине), а если пробираются ко мне -- то с неизвестных адресов сразу отправляются в корзину по причине нечитаемого subject.
Символы в нацыональных кодировках в заголовках кодируются методом, указанным в rfc2047. Например, можно каждое слово, содержащее что-нибудь кроме [0-9a-zA-Z] вместе с следующим пробелом заменяеть на строку =?utf-8?b?этослововbase64?= с пробелом после неё. Что такое base64 и где его берут в perl Вы, я думаю, представляете.

2) Большынство моих почтовых программ проигнорируют заголовок Content-type:, если не будет заголовка MIME-Version: 1.0
Добавьте.

3) Добавьте заголовок Content-transfer-encoding: 8bit 
Систем, которые без этого сломаются, а с этим воспримут -- ужэ очень мало, но во-первых, стандарт требует, а что Вам стоит, к тому жэ небольшой score в спамоловке можно себе скостить.

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1934 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.