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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодировка генерируемого Perl'om HTML-файла, - 
:(
    Опции темы
deymos34
Дата 23.9.2005, 00:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте!
Есть англоязычный скрипт аукциона на Перле. Перевел я его на русский, и все бы ничего, но возникли проблемы с кодировкой - как в русских описаниях лотов, так и в рассылаемых им письмах. Пришлось совершенствовать шапку генерируемого ХТМЛ-файла - добавить строку <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">. Не помогло (проверил, строка действительно добавляется в код, все ОК)! Проверял и в Эксплорере, и в Файерфоксе (автоопределение включено). Если же насильно переключить браузер на windows-1251, все отображается корректно.

Что посоветуете?

ЗЫ
А вот почту удалось отладить, но туда переменная charset была изначально включена, так что просто поменял в ней кодировку.

ЗЗЫ
Есть у меня скрипт другого аукциона, тоже на Перл, тоже самолично руссифицированный - так там проблем никаких нет, русский текст отображается корректно. При том, что в генерируемом им ХТМЛ-файле charset как не было, так и нет...

Заранее спасибо!
  Вверх
korob2001
Дата 23.9.2005, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Кодировку меняй в заголовках, а не на прямую вставляя тег <META>. Скорее всего они выводятся с помощью модуля CGI, т.е. ищи в скриптах заголовки header() и укажи нужную тебе кодировку header( -charset => "Windows-1251" ).
Если не поможет, тогда выкладывай код.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
deymos34
Дата 23.9.2005, 17:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











К сожалению, не помогло.
заголовки header импортируются из header.txt
вставил в него соответствующий код - он появился в генерируемых HTML-страницах (правда, вне тега <HEAD>), но это не помогло.

Сам ПЕРЛ-код можно увидеть здесь:
http://reninfa.ru/auct.pl

Рабочий скрипт находится здесь:

http://reninfa.ru/cgi-bin/auct.pl

(соответственно можно увидеть генерируемый ПЕРЛ-скриптом ХТМЛ-код).
  Вверх
Usya
Дата 24.9.2005, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я с этим не сталкивался, но в качестве пищи для размышления... Может прокатит smile

Цитата
Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?

На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:

AddDefaultCharset windows-1251

http://www.wmaster.ru/htaccess/index.htm

--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
deymos34
Дата 25.9.2005, 00:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











К сожалению, и это не помогло...
Более того, я даже в httpd.conf добавил строку AddDefaultCharset WINDOWS-1251

Эффект нулевой...
  Вверх
sharq
Дата 25.9.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



deymos34

Просто замени все строки
Content-type: text/html
на
Content-Type: text/html; charset=windows-1251.

И все! smile

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
deymos34
Дата 25.9.2005, 20:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Увы, и это не помогло... smile
  Вверх
Usya
Дата 25.9.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



1) А ты не пробовал спрашивать у админа?
2) Есть одно предложение - не фонтан, но если других советов не будет, то может подойти на первое время.
Посмотри в html-коде, как у тебя записаны слова Авто, Бизнес и Видео, аудио.
Сделай также, через хэш - автоматом перекодируй все буквы русского языка smile
Правда это немного через задницу smile

--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
sharq
Дата 25.9.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Все просто: найди функцию print_header
Код

sub print_header {
   print $q->header;
   ...
}

Замени header на header(-charset => 'windows-1251')

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
deymos34
Дата 26.9.2005, 00:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Урааа!!!
Запахало - с помощью последнего совета. Всем спасибо.

А я, конечно, дурак - это еще в первом совете предлагалось, но реализовал я тогда криво smile

  Вверх
deymos34
Дата 27.9.2005, 00:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Рано радовался...
Возникла еще одна проблема - скрипт не переваривает в вводимых пользователем данных кавычки (срезает всю инфу после них).
Дописал скрипт, чтобы он не принимал данные (выводя соответствующее сообщение), пока юзер не удалит все кавычки. А как сделать так, чтобы скрипт сам удалял кавычки?
  Вверх
Usya
Дата 27.9.2005, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Один из вариантов - через JavaScript, если с этим более менее знаком. При этом можно контролировать введенную инфу как при потере фокуса в нужном поле, так и при нажатии Submit.
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
sharq
Дата 27.9.2005, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



deymos34 используя регулярные выражения:
Код

my $text = s/"|'//g; # удаляет все двойные или одинарные кавычки в переменной $text



Usya это не надежно. smile

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Usya
Дата 28.9.2005, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Usya это не надежно.


sharq, когда это не срабатывает?

Кроме того, в любом случае от того что по мере заполнения формы (либо при отправке) юзеру будут выводиться сообщения о том, что в таких-то полях инфа будет немного модифицирована (либо некорректно введена) - не помешает.
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
sharq
Дата 28.9.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Usya все очень просто: клиент отключает javascript или меняет его и данные в "кривом" виде отправляются на сервер, поэтому чтобу не произошло казусов при записи данных, лучше их проверять на сервере и записовать исправленными или отсылать ответ об ошибке.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Usya
Дата 28.9.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



sharq, это не аргумент. Т.к. клиент при желании может вообще какую-нибудь лабуду послать и без кавычек. smile
Единственное, правда, я не знаю (не лазил) можно ли в настройках браузера где-нибудь отключить подобные javascript-ы, так чтобы при загрузке страницы они игнорировались. (Может где-нибудь в настройках безопасности...) Тогда согласен, так как это, в принципе, может сделать и клиент с вытекающими последствиями...
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
sharq
Дата 28.9.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Цитата(Usya @ 28.9.2005, 17:42)
Т.к. клиент при желании может вообще какую-нибудь лабуду послать и без кавычек.

вот поэтому нужно проверять все на сервере, используя perl!

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 28.9.2005, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

(Может где-нибудь в настройках безопасности...) Тогда согласен, так как это, в принципе, может сделать и клиент с вытекающими последствиями...

Может и именно в настройках безопасности.
Потому не стоит доверяться языкам работающим на клиенте, хотя лучше всё же делать проверку на клиенте для удобства, для того, что бы не грузить сервер лишними запросами из-за того, что пользователь не ввёл кавычку и т.п., но на сервере должна быть проверка в любом случае.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Usya
Дата 29.9.2005, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
вот поэтому нужно проверять все на сервере, используя perl!


sharq, а как ты проверишь отосланы нормальные данные или абра-катабра? smile
В 99% это можно сделать только визуально...

korob2001
Хотел я написать на счет дублирования и загрузки сервака лишними запросами, но в дублировании мне очень не нравится одна вещь - если со временем что-то придется менять (через месяц или более), не всегда сразу вспомнишь где и что продублировал. А потом ищешь глюки smile
Если таковых исправлений не предвидется (проект будет сдан или...), то согласен - так и надо делать! smile

Это сообщение отредактировал(а) Usya - 29.9.2005, 06:24
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
korob2001
Дата 29.9.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Я такие вещи обхожу очень просто:
Код JavaScript пишу прямо в программе Perl, затем подгружаю конфигурационные переменные, допустим с регулярными выражениями, которые находятся в отдельном файле в виде модуля. Т.е. если мне нужно будет изменить кол-во допустимых символов в поле или вообще само регулярное выражение, то достаточно изменить только файл конфигурации и регулярное выражение изменится как в Perl программе, так и в сценарии JavaScript.
Вобщем почему бы не сгенерировать и HTML и JavaScript с помощью Perl?

Это сообщение отредактировал(а) korob2001 - 29.9.2005, 08:15


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sharq
Дата 29.9.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Цитата(Usya @ 29.9.2005, 07:05)

sharq, а как ты проверишь отосланы нормальные данные или абра-катабра? smile
В 99% это можно сделать только визуально...

Необходимо максимально сделать защиту "от дурака".
Если поле введите число или дату, то проверяешь, только на числа и определенный формат.
Лексический разбор никто тебя не заставляет делать. smile



--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Usya
Дата 30.9.2005, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



korob2001

Цитата
Вобщем почему бы не сгенерировать и HTML и JavaScript с помощью Perl?


Если не требуется выполнять проверку, то это оптимальный вариант. Сам так делаю smile Но, то что можно сделать, например, в Perle c помощью регулярных выражений в JavaScript придется делать немного по другому. Так что проверку условия, в общем случае, на Perle и JavaScripte придется делать немного по разному. И исправлять при необходимости придется в двух местах.

sharq

Цитата
Необходимо максимально сделать защиту "от дурака"


На это я и оставил 1% для тех форм где только числовые данные. В 99% остальных - смесь с текстовыми полями и проверить можно только визуально!!!

Это сообщение отредактировал(а) Usya - 1.10.2005, 20:08
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
sharq
Дата 30.9.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Цитата(Usya @ 30.9.2005, 07:14)
Обычно только числовые данные мало где используются smile

Не говори гоп, пока не перепрыгнешь народная мудрость!

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
arto
Дата 10.10.2005, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



# perl -Mstrict -Wc =(GET http://reninfa.ru/auct.pl) |& wc -l
24
#
PM MAIL ICQ   Вверх
Страницы: (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.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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