Кодировка веб страницы на perl
Модератор: Модераторы разделов
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Кодировка веб страницы на perl
Есть скрипт на perl. И есть непонятный случай, когда генерируемая им веб-страница постоянно отображается в iso-8859-1, хотя сам файл в utf-8 и русский текст в нем в utf-8. Чтобы текст корректно отображался, приходится постоянно вручную в браузере менять кодировку на utf-8. Как сделать, чтобы кодировка utf отображалась по-умолчанию?
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Кодировка веб страницы на perl
Заголовок какой отдает? Такой:
? или charset указать забыли? И проверьте, какая кодировка по умолчанию настроена в http-сервере.
Код: Выделить всё
"Content-type: text/html; charset=utf8\n\n"
? или charset указать забыли? И проверьте, какая кодировка по умолчанию настроена в http-сервере.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Часть исходного кода страницы
Вообще этот скрипт часть программы openadmin. Остальные скрипты отображают сразу utf-8 нормально, а этот не хочет. Вот его код
Код: Выделить всё
<html><head><title>Custom Classlist</title>
<link rel="stylesheet" href="/admin.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<div style="float:left">[ <a href="/index.shtml">Длавна�</a> ]</div>
<center>
<h1>Custom Classlist</h1>
Вообще этот скрипт часть программы openadmin. Остальные скрипты отображают сразу utf-8 нормально, а этот не хочет. Вот его код
Код: Выделить всё
#! /usr/bin/perl
# Copyright 2001-2009 Leslie Richardson
# This file is part of Open Admin for Schools.
# Open Admin for Schools is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
use DBI;
use CGI;
use Cwd;
my %lex = ('Additional Field' => 'Additional Field',
'Leave blank for all students' => 'Leave blank for all students',
'Letter' => 'Letter',
'Cell Width' => 'Cell Width',
'Classlist' => 'Classlist',
'Main' => 'Главная',
'Error' => '',
'Repeat Entry Elements' => 'Repeat Entry Elements',
'Font Size' => 'Font Size',
'View/Download' => '',
'Select' => 'Select',
'Continue' => 'Продолжить',
'No Student(s) Found' => 'No Student(s) Found',
'A4' => 'A4',
'Homeroom' => 'Классный кабинет',
'Smaller=Darker' => 'Smaller=Darker',
'Paper Size' => 'Paper Size',
'Students' => 'Students',
'Custom Classlist' => 'Custom Classlist',
'Rm' => 'Rm',
'Max Students/Page' => 'Max Students/Page',
'Gray Shade' => 'Gray Shade',
'Include Student Number, Gender, Youngest' => 'Include Student Number, Gender, Youngest',
'Legal' => 'Legal',
'Grade' => 'Класс',
'View Log File' => '',
);
my $self = 'rptcustomclasslist.pl';
# Configurable settings
my $maxstudents = 30; # maximum students per page.
my $width = 8; # default width of columns, 8 mm;
my $extrafieldsize = 18; # studnum and extra field in mm.
my $defaultgrayshade = '0.95'; # shading for alternate rows
my $entrylimit = 18; # Max entries allowed for rotated text.
my $maxentrysize = 14; # Maximum number of characters for the entry
my $namewidth = 50; # Width of the first 'Name' column in mm.
my $q = new CGI;
print $q->header( -charset, $charset );
my %arr = $q->Vars;
eval require "../etc/admin.conf";
if ( $@ ) {
print $lex{Error}. " $@<br>\n";
die $lex{Error}. " $@\n";
}
eval require "../lib/liblatex.pl";
if ( $@ ) {
print $lex{Error}. " $@<br>\n";
die $lex{Error}. " $@\n";
}
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $iddst) = localtime(time);
$year = $year + 1900;
$wday++; $mon++;
my $currdate = "$dow[$wday], $month[$mon] $mday, $year";
my $dsn = "DBI:$dbtype:dbname=$dbase";
my $dbh = DBI->connect($dsn,$user,$password);
# Get current dir so know what CSS to display;
if (getcwd() =~ /tcgi/){ # we are in tcgi
$css = $tchcss;
$homepage = $tchpage;
}
print "$doctype\n<html><head><title>". $lex{'Custom Classlist'}. "</title>
<link rel=\"stylesheet\" href=\"$css\" type=\"text/css\">
$chartype\n</head><body>
<div style=\"float:left\">[ <a href=\"$homepage\">". $lex{Main}. "</a> ]</div>
<center>\n";
# Get values for Customization, then die.
# Values passed are width, maxstudents, repeat, entry1 to entry8
if ( not $arr{flag} ) {
showStartPage();
}
# Setup Extra fields
my ( $studnumfield, $extrafield, $extrafieldName );
if ( $arr{studnumfield} ) {
$studnumfield = 1;
delete $arr{studnumfield};
}
if ( $arr{extrafield} ) {
( my $dud, $extrafield ) = split /\(/, $arr{extrafield};
chop $extrafield; # remove trailing parenthesis
my $sth = $dbh->prepare("select fieldname from meta where tableid = 'student' and fieldid = ?");
$sth->execute( $extrafield );
if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; }
$extrafieldName = $sth->fetchrow;
( $extrafieldName ) = latex_filter( $extrafieldName );
delete $arr{extrafield};
}
# Set Sizes
# Letter paper size is 279mm x 216mm
# 200mm wide - 50mm name, 20mm extra fld, leaves 130mm for columns.
# a4 paper is 297mm x 210mm; legal is 356mm x 216mm
# The tabcolsep of 1mm leaves 128 mm where each col is $width + 1mm wide.
my $fontsize = $arr{fontsize}. 'pt';
if ( $arr{papersize} eq $lex{Letter} ) {
$textwidth = '200mm';
$textheight = '270mm';
$availablesize = 146;
$papersize = 'letterpaper';
} elsif ( $arr{papersize} eq $lex{A4} ) {
$textwidth = '194mm';
$textheight = '286mm';
$availablesize = 136;
$papersize = 'a4paper';
} else { # must be legal
$textwidth = '200mm';
$textheight = '340mm';
$availablesize = 146;
$papersize = 'legalpaper';
}
delete $arr{papersize}; # no longer needed.
# Restrict Gray Shading values
if ( $arr{grayshade} > 1 ) { $arr{grayshade} = 1; }
if ( $arr{grayshade} < 0.5 ) { $arr{grayshade} = 0.5; }
my $wi = $arr{width} - 1; # width of each col desired (in mm)
# take away 1 for 1mm tabcolsep.
# Set column count after shrinking available size
if ( $studnumfield ) { $availablesize -= $extrafieldsize; }
if ( $extrafield ) { $availablesize -= $extrafieldsize; }
my $colcount = $availablesize / ($arr{width} + 1);
$colcount = int $colcount; # truncate
#print "Column Count: $colcount \n";
# Filter for Passed values that might crash LaTeX
foreach my $key ( keys %arr ) {
( $arr{$key} ) = latex_filter( $arr{$key} );
}
if ( $arr{maxstudents} ) {
$maxlines = $arr{maxstudents};
} else {
$maxlines = $maxstudents;
}
# push entry text into array.
for (1..$entrylimit){
my $entryname = 'entry'.$_;
if ($arr{$entryname}){ # if it exists...push into array
push @entry,$arr{$entryname};
}
}
my $entrysize = $#entry + 1;
#print "Entry size: $entrysize\n";
if ($arr{repeat} and $entrysize){
$repeatcount = $colcount / $entrysize;
$repeatcount = int $repeatcount;
} elsif ($entrysize){
$repeatcount = 1; # only do it once if not repeat.
} else { $repeatcount = 0;}
#print "Repeat Count: $repeatcount\n";
my $shortname = "cclasslist$$";
my $filename = "$shortname.tex";
open(TEX,">$filename") || die "Can't open tex file";
print TEX "\\documentclass[$fontsize,$papersize ]{article}
\\usepackage{array,newcent,rotating,colortbl,inputenc}
\\inputencoding{utf8}
\\pagestyle{empty}
\\setlength{\\textwidth}{$textwidth}
\\setlength{\\textheight}{$textheight}
\\setlength{\\hoffset}{-36mm}
\\setlength{\\voffset}{-36mm}
\\addtolength{\\evensidemargin}{0mm}
\\addtolength{\\oddsidemargin}{0mm}
\\setlength{\\tabcolsep}{1mm}
\\setlength{\\extrarowheight}{2mm}
\\newcolumntype{G}{>{\\columncolor[gray]{1.00}}p{$namewidth mm}}\n";
# Note above... a columncolor of 1.00 means white, smaller number is darker.
print TEX "\\begin{document}\n";
my $select;
my $group = 'homeroom';
if ( $arr{group} eq $lex{Homeroom} and $arr{homeroom} ) {
my $grpvalue = $dbh->quote( $arr{homeroom} );
$select = "where homeroom = $grpvalue";
$group = 'homeroom';
} elsif ( $arr{group} eq $lex{Grade} and $arr{homeroom} ){
my $grpvalue = $dbh->quote( $arr{homeroom} );
$select = "where grade = $grpvalue";
$group = 'grade';
} elsif ( $arr{group} eq $lex{Homeroom} or $arr{group} eq $lex{Grade} ) {
$group = $arr{group};
} else { # should never happen unless attempted hack.
print $lex{Error}. "<br>$arr{group}\n";
print "</body></html>\n";
die;
}
my $sth = $dbh->prepare("select lastname, firstname, $group, studnum from student $select
order by $group,lastname,firstname");
$sth->execute;
if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; }
$rows = $sth->rows;
if ($rows < 1){ # No students found...
print '<h1>'. $lex{'No Student(s) Found'}. "!</h1>\n";
print "[ <a href=\"$homepage\">". $lex{Main}. "</a> ]\n";
print "</body></html>\n";
system("rm -f $shortname.*"); #cleanup
die;
}
my $curroom = -1;
my $teachername;
for ( my $i=1; $i<=$rows; $i++ ) {
my ($lastname, $firstname, $groupval, $studnum ) = $sth->fetchrow;
$oldroom = $curroom;
$curroom = $groupval;
if ( $oldroom eq $curroom ) { # We have another record for same page
$linecount++;
$studcount++;
if ($linecount > $maxlines) { # We'll print a new page header here
# New Page Header
$linecount = 0;
print TEX "\\end{tabular}\\\\ \\newpage\n";
prHeader();
}
# Print Normal Record.
prRecord($lastname, $firstname, $studnum);
} else { # We are starting a new page
# Get Teacher(s) Name for the room.
if ($curroom and $curroom != -1) {
$sth1 = $dbh->prepare("select sal, lastname from staff where homeroom = ?");
$sth1->execute( $curroom );
if ($DBI::errstr) { print "Teacher Error: $DBI::errstr"; die $DBI::errstr; }
$teachrows = $sth1->rows;
$teachername = '';
for ( 1..$teachrows ){
my ($sal, $lastname) = $sth1->fetchrow;
$teachername .= " $sal~$lastname";
}
} # End of teacher name
if ($i != 1) {
$studcount++;
prStudCount();
print TEX "\n\\end{tabular} \n\n \\newpage \n";
}
$linecount = 0;
$studcount = 0;
prHeader();
prRecord($lastname, $firstname, $studnum);
} # End of Starting a New Page.
} # End of Loop for all students
$studcount++;
prStudCount();
print TEX "\\end{tabular}\\\\ \n\\end{document}";
close TEX;
# Solve download location issues with cgi vs tcgi..
# Get current dir so know what CSS to display;
if (getcwd() =~ /tcgi/){ # we are in tcgi
$downloaddir = $tchdownloaddir;
$webdownloaddir = $tchwebdownloaddir;
}
system("$pdflatex $filename >pdflog$$.txt");
system("mv $shortname.pdf $downloaddir");
system("mv pdflog$$.txt $downloaddir");
system("rm -f $shortname.*");
print "<h1><a href=\"$webdownloaddir/$shortname.pdf\">";
print $lex{'View/Download'}. ' ', $lex{'Custom Classlist'}. "</a></h1>\n";
print "<p>[ <a href=\"$homepage\">Main</a> |\n <a href=\"$webdownloaddir/pdflog$$.txt\">";
print $lex{'View Log File'}. "</a>\n ]</p></center></body></html>\n";
#----------------
sub showStartPage { # Entry Values for Custom Script
#----------------
# Read student fields, and defaults into a @fields and %fieldname hash.
my $sth = $dbh->prepare("select fieldid, fieldname
from meta where tableid = 'student' order by fieldname");
$sth->execute;
my @fields = ();
my %fieldnames = ();
while ( ( my $fieldid, $fieldname ) = $sth->fetchrow ) {
$fieldname =~ s/\(//g;
$fieldname =~ s/\)//g; # strip parenthese. (sp?)
push @fields, $fieldid;
$fieldname{ $fieldid } = $fieldname;
}
print '<h1>'. $lex{'Custom Classlist'}. "</h1>\n";
print "<form action=\"$self\" method=\"post\">\n";
print "<input type=\"hidden\" name=\"flag\" value=\"1\">\n";
print "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n";
print "<tr><td></td><td><input type=\"submit\" value=\"". $lex{Continue};
print "\"></td></tr>\n";
print "<tr><td align=\"right\">". $lex{Select};
print " <select name=\"group\"><option>". $lex{Homeroom}. '</option><option>'. $lex{Grade};
print "</option></select></td>\n";
print "<td><input type=\"text\" name=\"homeroom\" size=\"8\" value=\"$arr{homeroom}\">\n";
print $lex{'Leave blank for all students'}. "</td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Cell Width'}. "</td>\n<td>";
print "<input type=\"text\" name=\"width\" size=\"3\" value=\"$width\">mm</td></tr>\n";
# Font size
print "<tr><td align=\"right\">". $lex{'Font Size'}. "</td><td>\n";
print "<select name=\"fontsize\">";
print "<option>11</option><option>12</option><option>10</option>\n";
print "</select></td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Gray Shade'}. "</td><td>\n";
print "<input type=\"text\" name=\"grayshade\" value=\"$defaultgrayshade\" size=\"5\">";
print " (0-1) ". $lex{'Smaller=Darker'}. "</td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Paper Size'}. "</td><td>";
print " <select name=\"papersize\"><option>". $lex{Letter}. "</option>\n";
print "<option>". $lex{Legal}. "</option><option>". $lex{A4};
print "</option></select></td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Include Student Number, Gender, Youngest'};
print "</td>\n<td>";
print "<input type=\"checkbox\" name=\"studnumfield\" value=\"1\" checked>";
print "</td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Additional Field'};
print "</td>\n<td>";
print "<select name=\"extrafield\"><option></option>\n";
foreach my $fld ( @fields ) {
print "<option>$fieldname{$fld} ($fld)</option>\n";
}
print "</select></td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Max Students/Page'}. "</td>\n<td>";
print "<input type=\"text\" name=\"maxstudents\" size=\"4\" value=\"$maxstudents\">";
print "</td></tr>\n";
print "<tr><td align=\"right\">". $lex{'Repeat Entry Elements'};
print "?</td>\n<td><input type=\"checkbox\" name=\"repeat\"></td></tr>\n";
for ( 1..$entrylimit ) {
my $entrytxt = "entry$_";
print "<tr><td align=\"right\">Entry $_</td>\n";
print "<td><input type=\"text\" name=\"$entrytxt\" ";
print "size=\"$maxentrysize\" maxlength=\"$maxentrysize\"></td></tr>";
print "\n";
}
print "<tr><td></td><td><input type=\"submit\" value=\"". $lex{Continue}. "\"></td></tr>\n";
print "</table></form></body></html>\n";
exit;
}
#-----------
sub prHeader {
#-----------
# Done at the start of a new page.
print TEX "\\begin{tabular}{G|";
if ( $studnumfield ) { print TEX "p{ $extrafieldsize mm}|"; }
if ( $extrafield ) { print TEX "p{ $extrafieldsize mm}|"; }
for (1..$colcount){ print TEX "p{$wi mm}|"; }
print TEX "}\n";
print TEX "\\raggedright\\bf $schoolname ". $lex{Classlist};
if ( $studnumfield ) { print TEX "& "; }
if ( $extrafield ) { print TEX "& "; }
for ( 1..$colcount ){ print TEX "& ";}
print TEX "\\\\ \n";
print TEX "\\small\\raggedright $currdate\n\\bigskip ";
if ( $studnumfield ) { print TEX "& "; }
if ( $extrafield ) { print TEX "& "; }
for ( 1..$colcount ){ print TEX "& ";}
print TEX "\\\\ \n";
if ( $arr{group} eq $lex{Grade} ){
print TEX "\\Large\\raggedright ". $lex{Grade}. " $curroom ";
} else { # homeroom
print TEX "\\bf\\raggedright $teachername ";
print TEX $lex{Rm}. " $curroom ";
}
if ( $studnumfield ) { print TEX "& "; }
if ( $extrafield ) {
print TEX "&\\hfil\\rule{6pt}{0pt}\\begin{rotate}{90}$extrafieldName";
print TEX "\\end{rotate}\\hfil";
#print TEX "& ";
}
my $remainder = $colcount - ($repeatcount * $entrysize);
if ( $repeatcount ){
for (1..$repeatcount){ # times to loop to print rotated text.
foreach my $txt ( @entry ) {
print TEX "&\\hfil\\rule{6pt}{0pt}\\begin{rotate}{90}$txt";
print TEX "\\end{rotate}\\hfil";
}
}
}
for (1..$remainder){ print TEX "& ";}
print TEX "\\\\ \\hline\n";
} # End of prHeader
#-----------
sub prRecord { # print normal record (ie. line)
#-----------
my ( $lastname, $firstname, $studnum ) = @_;
my ($youngest, $sex, $efield);
if ( $studnumfield or $extrafield ) { # we have to load some values
my $fields = 'youngest, sex ';
if ( $extrafield ) {
$fields .= ", $extrafield";
}
my $sth1 = $dbh->prepare("select $fields from student where studnum = ?");
$sth1->execute( $studnum );
if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; }
( $youngest, $sex, $efield ) = $sth1->fetchrow;
( $efield ) = latex_filter( $efield );
}
if ( $alternatingcolor == 0 ) {
print TEX "\\rowcolor[gray]{". $arr{grayshade}. "}";
$alternatingcolor = 1;
} else { $alternatingcolor = 0;}
print TEX "\\raggedright $lastname, $firstname";
if ( $studnumfield ) {
my $snfld = $studnum. $youngest. $sex;
print TEX "&\\footnotesize{$snfld}";
}
if ( $extrafield ) {
print TEX "&\\footnotesize{$efield}";
}
for (1..$colcount){ print TEX "& ";}
print TEX "\\\\\\hline\n";
}
#--------------
sub prStudCount {
#--------------
#if ($alternatingcolor == 0){ # continue color from above...
my $grayval = $arr{grayshade} - 0.08; # make it darker, slightly
print TEX "\\rowcolor[gray]{$grayval}";
#}
print TEX $lex{Students}. ": $studcount";
if ( $studnumfield ) { print TEX "& "; }
for (1..$colcount){ print TEX "& ";}
print TEX "\\\\\\hline\n";
}
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Кодировка веб страницы на perl
Что-то не видно инициализации $doctype. Хотя я в перле абсолютный ноль.
Попробуйте сначала указать
(или как там это в перле делается).
Попробуйте сначала указать
Код: Выделить всё
doctype = "Content-type: text/html; charset=utf8\n\n";
(или как там это в перле делается).
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Браузеры отдают приоритет HTTP заголовкам ответа сервера. Если сервер отвечает Content-Type: text/html;charset=iso-8859-1, то никакая <meta> не поможет.
Мои розовые очки
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Не понимаю. А если исходный код FF выдает это <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">,
а кликанье на Вид-Кодировка-показывает (Западноевропейская) ISO-8859-1?
P.S. И еще... Остальные-то скрипты отображаются нормально сразу в UTF-8 и там, где вид-кодировка, и там, где исходный код.
а кликанье на Вид-Кодировка-показывает (Западноевропейская) ISO-8859-1?
P.S. И еще... Остальные-то скрипты отображаются нормально сразу в UTF-8 и там, где вид-кодировка, и там, где исходный код.
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
eddy писал(а): ↑13.04.2010 09:59Что-то не видно инициализации $doctype. Хотя я в перле абсолютный ноль.
Попробуйте сначала указать
Код: Выделить всё
doctype = "Content-type: text/html; charset=utf8\n\n";
(или как там это в перле делается).
В конфиг файле программы есть такое
Код: Выделить всё
$charset = 'UTF-8';
# Appended to top of generated HTML.
$doctype = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">";
# Character Type
$chartype = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Кодировка веб страницы на perl
Вам уже сказали, что на теги "meta" внимание обращается в последнюю очередь (если веб-сервер не указал кодировку, и она не прописана в загловке пакета). Так что проверьте, все-таки, кодировку сервера по-умолчанию, и убедитесь, чтобы ваш скрипт отдавал правильный заголовок.
Я, например, столкнулся с подобным: у меня сервер отдает КОИ8, скрипт - тоже в КОИ8, но отображалось почему-то в юникоде. Исправил заголовок пакета - все стало нормально.
Я, например, столкнулся с подобным: у меня сервер отдает КОИ8, скрипт - тоже в КОИ8, но отображалось почему-то в юникоде. Исправил заголовок пакета - все стало нормально.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
И еще вот так на сервере
Серверные переменные и настройки
Переменная Значение сессии / Глобальное значение
auto increment increment 1
auto increment offset 1
automatic sp privileges ON
back log 50
basedir /usr/
binlog cache size 32,768
bulk insert buffer size 8,388,608
character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
collation database utf8_general_ci
collation server utf8_general_ci
completion type 0
Серверные переменные и настройки
Переменная Значение сессии / Глобальное значение
auto increment increment 1
auto increment offset 1
automatic sp privileges ON
back log 50
basedir /usr/
binlog cache size 32,768
bulk insert buffer size 8,388,608
character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
collation database utf8_general_ci
collation server utf8_general_ci
completion type 0
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Приведите тут, что говорит wget -S -q -O - URL_скрипта >/dev/null
Мои розовые очки
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Ничего не говорит
А если не удалять то говорит
Код: Выделить всё
@ubuntu:~$ wget -S -q -O - http://adminoa/cgi-bin/rptcustomclasslist.pl >/dev/null
@ubuntu:~$
А если не удалять то говорит
Код: Выделить всё
@ubuntu:~$ wget -S -q -O - http://adminoa/cgi-bin/rptcustomclasslist.pl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Custom Classlist</title>
<link rel="stylesheet" href="/admin.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body>
<div style="float:left">[ <a href="/index.shtml">Главная</a> ]</div>
<center>
<h1>Custom Classlist</h1>
<form action="rptcustomclasslist.pl" method="post">
<input type="hidden" name="flag" value="1">
<table cellpadding="3" cellspacing="0" border="0">
<tr><td></td><td><input type="submit" value="Продолжить"></td></tr>
<tr><td align="right">Select <select name="group"><option>Классный кабинет</option><option>Класс</option></select></td>
<td><input type="text" name="homeroom" size="8" value="">
Leave blank for all students</td></tr>
<tr><td align="right">Cell Width</td>
<td><input type="text" name="width" size="3" value="8">mm</td></tr>
<tr><td align="right">Font Size</td><td>
<select name="fontsize"><option>11</option><option>12</option><option>10</option>
</select></td></tr>
<tr><td align="right">Gray Shade</td><td>
<input type="text" name="grayshade" value="0.95" size="5"> (0-1) Smaller=Darker</td></tr>
<tr><td align="right">Paper Size</td><td> <select name="papersize"><option>Letter</option>
<option>Legal</option><option>A4</option></select></td></tr>
<tr><td align="right">Include Student Number, Gender, Youngest</td>
<td><input type="checkbox" name="studnumfield" value="1" checked></td></tr>
<tr><td align="right">Additional Field</td>
<td><select name="extrafield"><option></option>
</select></td></tr>
<tr><td align="right">Max Students/Page</td>
<td><input type="text" name="maxstudents" size="4" value="30"></td></tr>
<tr><td align="right">Repeat Entry Elements?</td>
<td><input type="checkbox" name="repeat"></td></tr>
<tr><td align="right">Entry 1</td>
<td><input type="text" name="entry1" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 2</td>
<td><input type="text" name="entry2" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 3</td>
<td><input type="text" name="entry3" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 4</td>
<td><input type="text" name="entry4" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 5</td>
<td><input type="text" name="entry5" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 6</td>
<td><input type="text" name="entry6" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 7</td>
<td><input type="text" name="entry7" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 8</td>
<td><input type="text" name="entry8" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 9</td>
<td><input type="text" name="entry9" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 10</td>
<td><input type="text" name="entry10" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 11</td>
<td><input type="text" name="entry11" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 12</td>
<td><input type="text" name="entry12" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 13</td>
<td><input type="text" name="entry13" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 14</td>
<td><input type="text" name="entry14" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 15</td>
<td><input type="text" name="entry15" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 16</td>
<td><input type="text" name="entry16" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 17</td>
<td><input type="text" name="entry17" size="14" maxlength="14"></td></tr>
<tr><td align="right">Entry 18</td>
<td><input type="text" name="entry18" size="14" maxlength="14"></td></tr>
<tr><td></td><td><input type="submit" value="Продолжить"></td></tr>
</table></form></body></html>
@ubuntu:~$
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Хех, так Ваш сервер вообще никаких заголовков не возвращает — это кошмарно.
user@localhost
$ wget -S -q -O - http://localhost >/dev/null
HTTP/1.1 200 OK
Date: Tue, 13 Apr 2010 08:37:13 GMT
Server: Apache/2.2.15 (Debian)
Last-Modified: Wed, 08 Apr 2009 09:02:12 GMT
ETag: "18e002-2d-46707631b2d00"
Accept-Ranges: bytes
Content-Length: 45
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
Мои розовые очки
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Код: Выделить всё
Хех, так Ваш сервер вообще никаких заголовков не возвращает — это кошмарно.
Странно. Я ведь, вроде ничего не менял в нем кроме utf. Как установился по умолчанию так и работает локально для тестирования. А как сделать чтоб возращал? И в этом может быть причина кракозябров?
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Кодировка веб страницы на perl
watashiwa_darede... писал(а): ↑13.04.2010 12:38Хех, так Ваш сервер вообще никаких заголовков не возвращает — это кошмарно.
Сейчас проверил: ни мой рабочий компьютер, ни еще пара серверов в локалке абсолютно ничего не отдают.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Ну, чтобы прийти к общему знаменателю (может, у меня wget какой-то особенный):
user@localhost
$ wget -S -q -O - http://unixforum.org >/dev/null
HTTP/1.1 200 OK
Server: nginx/0.8.15
Date: Tue, 13 Apr 2010 09:06:46 GMT
Content-Type: text/html;charset=windows-1251
Connection: close
X-Powered-By: PHP/5.2.6-1+lenny8
Set-Cookie: unixforumorgsession_id=900a357f2493aa7cc84852cf27cc620d; path=/; domain=.unixforum.org; httponly
Cache-Control: no-cache, must-revalidate, max-age=0
Expires: 0
Pragma: no-cache
Vary: Accept-Encoding
Content-Language: ru
Мои розовые очки
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Кодировка веб страницы на perl
У вас "wget какой-то особенный". У меня ничего не выдает.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Зато у меня есть файл /etc/apache2/conf.d/charset
но это мне не помагает с отображением utf
и есть файл /etc/apache2/conf.d/security и в нем
Про эти заголовки речь ))?
Код: Выделить всё
AddDefaultCharset UTF-8
но это мне не помагает с отображением utf
и есть файл /etc/apache2/conf.d/security и в нем
Код: Выделить всё
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of: Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#
#ServerTokens Minimal
ServerTokens Full
Про эти заголовки речь ))?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Ну, в конце концов можно и совсем на низком уровне:
user@localhost
$ echo -e 'GET /index.php?showtopic=111980 HTTP/1.0\nHost: unixforum.org\n' | nc unixforum.org 80 | sed '/^\r$/,$d'
HTTP/1.1 200 OK
Server: nginx/0.8.15
Date: Tue, 13 Apr 2010 09:12:14 GMT
Content-Type: text/html;charset=windows-1251
Connection: close
X-Powered-By: PHP/5.2.6-1+lenny8
Set-Cookie: unixforumorgsession_id=dfd1b9ea9d0896228fa5457dbb660e7b; path=/; domain=.unixforum.org; httponly
Set-Cookie: unixforumorgtopicsread=a%3A1%3A%7Bi%3A111980%3Bi%3A1271149933%3B%7D; path=/; domain=.unixforum.org
Set-Cookie: unixforumorgmodpids=deleted; expires=Mon, 13-Apr-2009 09:12:12 GMT; path=/; domain=.unixforum.org
Cache-Control: no-cache, must-revalidate, max-age=0
Expires: 0
Pragma: no-cache
Vary: Accept-Encoding
Content-Language: ru
Хм... Дойду до работы, проверю на убунте.
Это всего-лишь default, скрипт может и переопределить.
Нет.
Мои розовые очки
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Это всего-лишь default, скрипт может и переопределить.
С этого я и начал тему. В каком месте интересно скрипт "переопределяет" кодировку, если так?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Без понятия. Я сначала пытаюсь выяснить, переопределяет ли он её, посмотрев возвращаемые сервером заголовки.
Мои розовые очки
-
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: Кодировка веб страницы на perl
Код: Выделить всё
#!/usr/bin/perl
use strict;
use CGI;
my $q = CGI->new();
print $q->header(-charset=>'UTF-8');
print $q->start_html();
print $q->end_html();
Desipere in loco
Спасибо сказали:
-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Кодировка веб страницы на perl
Ура! Еще такой вопрос. А почему остальные скрипты не переопределяют?
-
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: Кодировка веб страницы на perl
Если в остальных скриптах допущена такая ошибка:
Код: Выделить всё
print $q->header( -charset, $charset );
То не будут.
Desipere in loco
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Кодировка веб страницы на perl
Проверил на 8.04 — в убунте wget поломанный. В man про ключик -S написано, но он не работает.
Мои розовые очки