| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Форма обратной связи на сайте |
| Автор: Blanka 15.12.2013, 14:09 |
| Помогите, пожалуйста, с возможным решением проблемы. Нужен скрипт на Перл для формы обратной связи, корректно (в правильной кодировке, без аброкодабр) отсылающий данные из формы из разных броузеров. Сайт в utf-8. |
| Автор: Bulat 15.12.2013, 20:36 |
куда отсылающий?? |
| Автор: Blanka 17.12.2013, 13:29 |
| При переходе сайта на utf-8. Текст сообщения присылаемого на электронную почту из формы обратной связи стал нечитабельным. Я бы хотела найти решения этого вопроса. |
| Автор: Bulat 17.12.2013, 14:02 |
| Blanka, а может код какой выложишь? |
| Автор: Blanka 17.12.2013, 14:22 | ||
Добавлено @ 14:26 код типовой ничего особенного. На html-страницу все выводится корректно. Заголовок письма "Оставлен контакт от клиента с сайта", тоже на нормальном русском, а текст сообщения УВЫ!! |
| Автор: noize 17.12.2013, 14:42 |
| вы, я смотрю, любите рисковать - код пишете без strict'ов и warnings'ов |
| Автор: Blanka 17.12.2013, 15:17 |
| Это как? Добавлено через 2 минуты и 47 секунд Код написан лет 10 назад. Я сейчас немного другими вопросами занимаюсь, поэтому в программировании меня можно сейчас назвать Чайником... Очень буду признательна, если укажите на недостатки... |
| Автор: noize 17.12.2013, 15:49 | ||
добавьте в код вот это:
и от этого уже пляшите |
| Автор: alezzz 17.12.2013, 18:03 |
хороший универсальный совет, подходит под любую проблему если в начале кода нет этих строчек Blanka &send_mail; переместите за &print_page_end; перед open MAIL попробуйте для всех переменных ($n1, $ar...) перебрать такие варианты: Encode::_utf8_on($n1); или Encode::_utf8_off($n1); Sendmail-ом не отсылал, может у него какая неприязнь к utf или в какой он там кодировке отправляет по умолчанию. У меня работает автоматическая отправка через связку mutt - ssmtp, с utf были проблемы, но решались. |
| Автор: Blanka 17.12.2013, 18:20 |
| Спасибо. Можно, конечно, добавить. Правда программа элементарная Добавлено через 2 минуты и 25 секунд alezzz, тоже спасибо. Попытаюсь сделать, как Вы рекомендуете. |
| Автор: Bulat 17.12.2013, 19:42 |
| Там на самом деле мож проще перекодировать в cp1251 при отправке! |
| Автор: Blanka 17.12.2013, 19:44 |
| alezzz, похоже действительно проблема в sendmail хостера. Перенесла файлы на другой хостинг для экспериментов над ними. Вопрос с нечитабельностью текста писем снялся. Придется теперь много вопросов задавать тех. поддержке. Добавлено через 6 минут и 55 секунд Bulat, при отправке пробовала перекодировать accept-charset в тег form. Но IE на это не отреагировал, а в остальных браузерах помогло с текстом сообщения, но стало выводить "вопросики" при выводе введенных данных на страницу. |
| Автор: Bulat 17.12.2013, 20:32 |
Я имел ввиду в момент отправки письма, через Encode |
| Автор: Blanka 17.12.2013, 22:13 | ||
Поделитесь методом, пжс. |
| Автор: Blanka 18.12.2013, 00:35 |
| И еще вопросик от чайничка. ? Можно ли в заголовок отправляемого мыла вписать что-то вроде print MAIL "Content-type: text/html; charset=utf-8"; |
| Автор: Blanka 18.12.2013, 18:01 | ||
| Хоть мне никто и не ответил... Но на самом деле, это помогло. print MAIL "Content-Type: text/plain; charset=utf-8\n"; сразу после строки open (MAIL, "| /usr/sbin/sendmail -t");
|
| Автор: tzirechnoy 29.12.2013, 17:26 | ||
Убивать сразу. Вообще, на почту и 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 в спамоловке можно себе скостить. |