Проблема с кодировкой (CGI-script)

Elina74

Есть такой скрипт:


#!/usr/bin/perl
use strict;
use CGI;
my $query = new CGI;
print $query->header;
print("<html><head>\n");
print("<meta http-equiv=\"content-type\" content=\"text/html; encoding=koi8-r\">\n");
print("</head><body>\n");
print("Привет!");
print $query->end_html;
exit 0;


Русские буквы в файле - в кодировке koi8-r.
В конфигурационном файле /etc/apache/httpd.conf есть строчка
AddDefaultCharset on
Вне зависимости от того что я напишу вместо on: off, koi8-r, windows-1251 результат не меняется: скрипт выдает страницу с нечитаемыми кракозяблями
можете посоветовать что делать?

stream2008

А после того, как в оборзевателе вручную кодировку проставишь - нормально?

Chupa

$query->header чему равно?

Elina74

Да. Совершенно нормально.
http://gluk.v.ru/cgi-bin/test.pl

Elina74

Без понятия.
Если его не написать, то страница не загрузится, ошибка 500.

Chupa

маза хуйня именно в нём
можно вместо него написать "Content-type: text/html\n\n"

Elina74

Ничего себе...
Получилось!
А оно больше глючить не будет?

sergey_m

encoding=koi8-r
Вот это - уродство. По стандарту HTTP кодировка указывается в заголовке, и твой сервер это делает. То, что ты указываешь в теле HTML и вызывает глюки. У Арта Лебедева есть про это статья, правда я не смог найти её даже с помощью гугла.
Однако, не менее авторитетный Андрей Чернов считает иначе.
Все же подавляющее большинство IT специалистов работающих с web склоняются к мнению Лебедева.

Chupa

> По стандарту HTTP кодировка указывается в заголовке,
> и твой сервер это делает.
Сервер это делает для документов, а не для скриптов.
> То, что ты указываешь в теле HTML и вызывает глюки.
Нет. Содержимое документа на глюки не влияет.
Если в заголовке явно указана кодировка, то документ её переопределить уже не может.
Все глюки из-за того, что сервер или скрипт пишет хуйню (iso-8859-1) в заголовок,
соответственно, есть два способа лечения:
1) научить сервер/скрипт генерировать заголовок с правильной кодировкой;
2) запретить серверу/скрипту указывать кодировку и делать это в теле документа.

Marinavo_0507

> Если в заголовке явно указана кодировка, то документ её переопределить уже не может.
У говнобраузера на клиенте может быть и другое мнение.

Chupa

>> Если в заголовке явно указана кодировка, то документ её переопределить уже не может.
> У говнобраузера на клиенте может быть и другое мнение.
Оно может быть, даже если документ без шизофрении.

VitMix


$query->charset("koi8-r");

zya369

$query->charset("koi8-r");

там вроде ещё можно в качестве параметра у $query->header кодировку указать..
я правда не помню точно как... что-то типа
$query->header(-charset => "koi8-r")

тогда в html не надо ничего указывать
Оставить комментарий
Имя или ник:
Комментарий: