| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > кодировка генерируемого Perl'om HTML-файла |
| Автор: deymos34 23.9.2005, 00:05 |
| Здравствуйте! Есть англоязычный скрипт аукциона на Перле. Перевел я его на русский, и все бы ничего, но возникли проблемы с кодировкой - как в русских описаниях лотов, так и в рассылаемых им письмах. Пришлось совершенствовать шапку генерируемого ХТМЛ-файла - добавить строку <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">. Не помогло (проверил, строка действительно добавляется в код, все ОК)! Проверял и в Эксплорере, и в Файерфоксе (автоопределение включено). Если же насильно переключить браузер на windows-1251, все отображается корректно. Что посоветуете? ЗЫ А вот почту удалось отладить, но туда переменная charset была изначально включена, так что просто поменял в ней кодировку. ЗЗЫ Есть у меня скрипт другого аукциона, тоже на Перл, тоже самолично руссифицированный - так там проблем никаких нет, русский текст отображается корректно. При том, что в генерируемом им ХТМЛ-файле charset как не было, так и нет... Заранее спасибо! |
| Автор: korob2001 23.9.2005, 00:36 |
| Кодировку меняй в заголовках, а не на прямую вставляя тег <META>. Скорее всего они выводятся с помощью модуля CGI, т.е. ищи в скриптах заголовки header() и укажи нужную тебе кодировку header( -charset => "Windows-1251" ). Если не поможет, тогда выкладывай код. |
| Автор: deymos34 23.9.2005, 17:25 |
| К сожалению, не помогло. заголовки header импортируются из header.txt вставил в него соответствующий код - он появился в генерируемых HTML-страницах (правда, вне тега <HEAD>), но это не помогло. Сам ПЕРЛ-код можно увидеть здесь: http://reninfa.ru/auct.pl Рабочий скрипт находится здесь: http://reninfa.ru/cgi-bin/auct.pl (соответственно можно увидеть генерируемый ПЕРЛ-скриптом ХТМЛ-код). |
| Автор: Usya 24.9.2005, 05:10 | ||
Я с этим не сталкивался, но в качестве пищи для размышления... Может прокатит
|
| Автор: deymos34 25.9.2005, 00:46 |
| К сожалению, и это не помогло... Более того, я даже в httpd.conf добавил строку AddDefaultCharset WINDOWS-1251 Эффект нулевой... |
| Автор: sharq 25.9.2005, 02:19 |
| deymos34 Просто замени все строки Content-type: text/html на Content-Type: text/html; charset=windows-1251. И все! |
| Автор: deymos34 25.9.2005, 20:47 |
| Увы, и это не помогло... |
| Автор: Usya 25.9.2005, 21:28 |
| 1) А ты не пробовал спрашивать у админа? 2) Есть одно предложение - не фонтан, но если других советов не будет, то может подойти на первое время. Посмотри в html-коде, как у тебя записаны слова Авто, Бизнес и Видео, аудио. Сделай также, через хэш - автоматом перекодируй все буквы русского языка Правда это немного через задницу |
| Автор: sharq 25.9.2005, 22:20 | ||
Все просто: найди функцию print_header
Замени header на header(-charset => 'windows-1251') |
| Автор: deymos34 26.9.2005, 00:38 |
| Урааа!!! Запахало - с помощью последнего совета. Всем спасибо. А я, конечно, дурак - это еще в первом совете предлагалось, но реализовал я тогда криво |
| Автор: deymos34 27.9.2005, 00:48 |
| Рано радовался... Возникла еще одна проблема - скрипт не переваривает в вводимых пользователем данных кавычки (срезает всю инфу после них). Дописал скрипт, чтобы он не принимал данные (выводя соответствующее сообщение), пока юзер не удалит все кавычки. А как сделать так, чтобы скрипт сам удалял кавычки? |
| Автор: Usya 27.9.2005, 20:35 |
| Один из вариантов - через JavaScript, если с этим более менее знаком. При этом можно контролировать введенную инфу как при потере фокуса в нужном поле, так и при нажатии Submit. |
| Автор: sharq 27.9.2005, 23:24 | ||
deymos34 используя регулярные выражения:
Usya это не надежно. |
| Автор: Usya 28.9.2005, 06:06 | ||
sharq, когда это не срабатывает? Кроме того, в любом случае от того что по мере заполнения формы (либо при отправке) юзеру будут выводиться сообщения о том, что в таких-то полях инфа будет немного модифицирована (либо некорректно введена) - не помешает. |
| Автор: sharq 28.9.2005, 10:02 |
| Usya все очень просто: клиент отключает javascript или меняет его и данные в "кривом" виде отправляются на сервер, поэтому чтобу не произошло казусов при записи данных, лучше их проверять на сервере и записовать исправленными или отсылать ответ об ошибке. |
| Автор: Usya 28.9.2005, 16:42 |
| sharq, это не аргумент. Т.к. клиент при желании может вообще какую-нибудь лабуду послать и без кавычек. Единственное, правда, я не знаю (не лазил) можно ли в настройках браузера где-нибудь отключить подобные javascript-ы, так чтобы при загрузке страницы они игнорировались. (Может где-нибудь в настройках безопасности...) Тогда согласен, так как это, в принципе, может сделать и клиент с вытекающими последствиями... |
| Автор: sharq 28.9.2005, 20:37 | ||
вот поэтому нужно проверять все на сервере, используя perl! |
| Автор: korob2001 28.9.2005, 23:33 | ||
Может и именно в настройках безопасности. Потому не стоит доверяться языкам работающим на клиенте, хотя лучше всё же делать проверку на клиенте для удобства, для того, что бы не грузить сервер лишними запросами из-за того, что пользователь не ввёл кавычку и т.п., но на сервере должна быть проверка в любом случае. |
| Автор: Usya 29.9.2005, 06:05 | ||
sharq, а как ты проверишь отосланы нормальные данные или абра-катабра? В 99% это можно сделать только визуально... korob2001 Хотел я написать на счет дублирования и загрузки сервака лишними запросами, но в дублировании мне очень не нравится одна вещь - если со временем что-то придется менять (через месяц или более), не всегда сразу вспомнишь где и что продублировал. А потом ищешь глюки Если таковых исправлений не предвидется (проект будет сдан или...), то согласен - так и надо делать! |
| Автор: korob2001 29.9.2005, 08:14 |
| Я такие вещи обхожу очень просто: Код JavaScript пишу прямо в программе Perl, затем подгружаю конфигурационные переменные, допустим с регулярными выражениями, которые находятся в отдельном файле в виде модуля. Т.е. если мне нужно будет изменить кол-во допустимых символов в поле или вообще само регулярное выражение, то достаточно изменить только файл конфигурации и регулярное выражение изменится как в Perl программе, так и в сценарии JavaScript. Вобщем почему бы не сгенерировать и HTML и JavaScript с помощью Perl? |
| Автор: sharq 29.9.2005, 10:55 | ||
Необходимо максимально сделать защиту "от дурака". Если поле введите число или дату, то проверяешь, только на числа и определенный формат. Лексический разбор никто тебя не заставляет делать. |
| Автор: Usya 30.9.2005, 06:14 | ||||
korob2001
Если не требуется выполнять проверку, то это оптимальный вариант. Сам так делаю sharq
На это я и оставил 1% для тех форм где только числовые данные. В 99% остальных - смесь с текстовыми полями и проверить можно только визуально!!! |
| Автор: sharq 30.9.2005, 20:24 | ||
Не говори гоп, пока не перепрыгнешь народная мудрость! |
| Автор: arto 10.10.2005, 12:49 |
| # perl -Mstrict -Wc =(GET http://reninfa.ru/auct.pl) |& wc -l 24 # |