Автор Тема: Проблема с кодировкой  (Прочитано 4325 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн grinder

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 90
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с кодировкой
« : 02 Сентября 2002, 07:56:13 »
Гостевая книга.
Когда юзер добавляет информацию, она пишется в файл, и по идее должна эта инфа писаться в KOI8, но она пишется в win-1251. И поэтому когда эта инфа выводится в браузер то получается плохо. Весь контент в KOI8, а то что читается из файла в win-1251. Так что тексты сообщений гостевой прочитать невозможно. Пробовал писать :
print "Content-type: text/html; windows-1251\\n\\n";
не помогает.
Скрипт примерно такой (проверку ввода запрещенного вырезал):

#!/usr/local/bin/perl

print "Content-type: text/html\\n\\n";

$buffer=$ENV{\'QUERY_STRING\'};
#@pairs = split(/&/, $buffer);
@pairs = split(/\\\\&/, $buffer);
foreach $pair (@pairs)
{
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $in{$name} = $value;
}

  $NAME = "$in{name}";
  $EMAIL = $in{email};
  $TEXT = "$in{text}";
  $DATES = $data;
 
  open(FILE,">>guest.txt");
  print FILE $NAME,"|",$EMAIL,"| |",$TEXT,"|",$DATES,"\\n";
  close(FILE);    


Во всех shtml, в которых потом скрипт вставляет текст из файла прописана строка:



Видимо нужно, чтобы когда информация добавляется, она писалась в файл в KOI8. Как это сделать?

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Проблема с кодировкой
« Ответ #1 : 02 Сентября 2002, 09:03:07 »
Зачит так. Если ты желаешь видеть свои стр-ци в кои, тогда используй
Ну а если хочешь заниматся перекодировкой, вот тебе фирменный модуль(пан сам склёпав):
package Encode;

use Exporter;
@ISA = (\'Exporter\');
@EXPORT = qw(&translate);

sub new {
 my $class = shift;
 my $self = {};
 %$self = @_;
 bless($self,$class);
 return $self;
}
%code = ();
$code{alt} =
"\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87".
"\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f".
"\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97".
"\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f".
"\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7".
"\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xf0\\xf1\\x49\\x69\\xf4\\xf5\\xf2\\xf3";

$code{koi} =
"\\xe1\\xe2\\xf7\\xe7\\xe4\\xe5\\xf6\\xfa".
"\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0".
"\\xf2\\xf3\\xf4\\xf5\\xe6\\xe8\\xe3\\xfe".
"\\xfb\\xfd\\xff\\xf9\\xf8\\xfc\\xe0\\xf1".
"\\xc1\\xc2\\xd7\\xc7\\xc4\\xc5\\xd6\\xda".
"\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0".
"\\xd2\\xd3\\xd4\\xd5\\xc6\\xc8\\xc3\\xde".
"\\xdb\\xdd\\xdf\\xd9\\xd8\\xdc\\xc0\\xd1".
"\\xb3\\xa3\\xb6\\xa6\\xb7\\xa7\\xb4\\xa4";

$code{iso} =
"\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7".
"\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf".
"\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7".
"\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf".
"\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7".
"\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xa1\\xf1\\xa6\\xf6\\xa7\\xf7\\xa4\\xf4";

$code{win} =
"\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7".
"\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf".
"\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7".
"\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7".
"\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff".
"\\xa8\\xb8\\xb2\\xb3\\xaf\\xbf\\xaa\\xba";

sub translate {
 my $from = shift;
 my $to = shift;
 my @text = @_?@_:();

 if(!(exists $code{$from}) || !(exists $code{$to})){
  if(scalar(@text) == 1){return $text[0];} elsif (scalar(@text) == 0){return \'\';}
  return @text;
 }
 foreach(@text){
  eval "\\$_ =~ tr/$code{$from}/$code{$to}/";
 }
 if(scalar(@text) == 1){return $text[0];} elsif (scalar(@text) == 0){return \'\';}
 return @text;
}

 Использовать так:

#!/usr/bin/perl -w

use Encode;

$x = \'просто текст\';

$x = translate(\'koi\',\'alt\',$x); # $x = translate(\'from\',\'to\',$x) -win,iso,koi,alt
print $x,"\\n";

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
Проблема с кодировкой
« Ответ #2 : 07 Сентября 2002, 04:16:18 »
print "Content-type: text/html;charset=$locale{\'tcp_encoding\'}\\n\\n";
example:
print "Content-type: text/html;charset=koi8-r\\n\\n";
pvdlab.net - копай там cgi-lib.pl там есть функции перегонки одних русских кодировок в другие. Тоже могут пригодиться.

2Serchey:
Насколько я понимаю, не koi8-ru, а koi8-r (http://www.linux.ru.net/index.php)
Debian/GNU Linux is rulezz...

Оффлайн grinder

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 90
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с кодировкой
« Ответ #3 : 10 Сентября 2002, 23:45:12 »
За модуль спасибо, работает. Только правда дома. Файлы модулей должны лежать не в любом каталоге, а в тех, которые определены в @INC. Так ведь? На хостинге у меня нет доступа к папке, в которой ищутся модули. Можно как-нибудь эти пути переопределить?

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проблема с кодировкой
« Ответ #4 : 11 Сентября 2002, 00:20:15 »
Цитировать
Так ведь?

Угу.
Цитировать
Можно как-нибудь эти пути переопределить?

скинь модуль в папку скрипта, а в самом скрипте:
use lib qw(.);
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проблема с кодировкой
« Ответ #5 : 11 Сентября 2002, 00:20:49 »
ну и модуль подключить не забудь:-)
Ну к чему все это, лучше бы водки выпили...

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
Проблема с кодировкой
« Ответ #6 : 11 Сентября 2002, 00:21:00 »
#В начало скрипта:
use lib \'/home/fatal/t/thewebfactory/cgi-bin/BonchForum/lib\'; #Полный(желательно) путь к папке.
#И кладёшь в неё модуль.
Debian/GNU Linux is rulezz...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проблема с кодировкой
« Ответ #7 : 11 Сентября 2002, 00:23:24 »
Цитировать
use lib \'/home/fatal/t/thewebfactory/cgi-bin/BonchForum/lib\'; #Полный(желательно)

лучше всё-таки вместе со скриптом, а то в этом случае при переезде схостинга придётс яскрипт редактировать, а ещё у хостера могут пути измениться, хотя это маловероятно:-)
Ну к чему все это, лучше бы водки выпили...

Оффлайн grinder

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 90
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с кодировкой
« Ответ #8 : 11 Сентября 2002, 00:28:20 »
Спасибо.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28