Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > русский текст


Автор: noder 26.8.2004, 09:07
Есть такой скрипт:

#!/usr/local/bin/perl

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@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;
$value =~ s/<!--(.|\n)*-->//g;
$input{$name} = $value;
}

Так вот если ему подать русский текст из веб формы, то он записывает в файл (а обработонное мне нужно записывать в файл) одни знаки вопросы, помогите разобраться, что для этого нужно.

Автор: chaos 27.8.2004, 07:56
Конвертировать тебе симовлы нужно!!!

Автор: noder 27.8.2004, 12:13
Цитата(chaos @ 27.8.2004, 07:56)
Конвертировать тебе симовлы нужно!!!

Э-эм рискну спросить...как?
потому как я еще не совсем понимаю какую роль играют следующие строки в моем скрипте:

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;

на сколько я понимаю, в этих строках идет замена всяких символов?

Автор: dimes 27.8.2004, 13:30
-каким браузером ты постиш данные?
-есть ли чтонибуть на странице что явно указывает кодировку? например <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-как убедился что это не твой редактор превращает символы в "?" при просмотре полученных файлов?

Автор: noder 27.8.2004, 16:35
Цитата(dimes @ 27.8.2004, 13:30)
-каким браузером ты постиш данные?
-есть ли чтонибуть на странице что явно указывает кодировку? например <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-как убедился что это не твой редактор превращает символы в "?" при просмотре полученных файлов?

данные постились из IE, на странице с формой META тега нет.
Просматривал содержимое файла консольным редактором Vi (проблемы с локалью исключены), потом просматривал в Виндах, те же знаки вопроса hmmm.gif

Автор: GoodBoy 27.8.2004, 17:42
noder
Честно говоря у меня подозрения именно на локаль... Попробуй в скрипте прописать это:
Код
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "ru_RU.windows-1251");
use locale;

А на странице -
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
И все кодировку страницы сделать в 1251.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)