Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] Локаль в CGI под Apache.



> Этот скрипт из консоли выдает "Yes!", а как cgi, из-под Apache, то "No!"
> 
> #!/usr/bin/perl -w
> 
> use POSIX qw(locale_h);
> use strict;
> 
> $ENV{LANG}='ru_RU.KOI8';          #это все от безысходности :(
> $ENV{LC_ALL}='ru_RU.KOI8';
> $ENV{LC_CTYPE}='ru_RU.KOI8';
> setlocale(LC_ALL,'ru_RU.KOI8');
> setlocale(LC_CTYPE,'ru_RU.KOI8');
> use locale;
> 
> $a='ляляля';
> 
> print "Content-type: text/plain\n\n";
> 
> if($a=~/\w+/) { print "Yes!\n"; }
> else { print "No!\n"; }
> 
> #конец.
> 
> Причем неважно, под mod_perl или под чистым perl.
> Почему?
А какая система?? Я, кроме как на Irix-e,  ни где не встречал такую
locale как 'ru_RU.KOI8'? Это первое.

Второе, 'use locale;' так же вызывает setlocale, используя 
environment, но, как я понимаю, не из $ENV - это только его копия.
Поэтому, ставить 'use locale;' после setlocale вредно.


Я думаю, если вы в шеле удалите  LC_* и LANG, то получите результат
аналогичный cgi.
Это хорошо показывает:  print `locale`;

Кстати, $ENV переходит к потомкам!!! Вообщем, это их окружение.

Исходя из сказаного:

#!/usr/bin/perl -w

use locale;
use POSIX qw(locale_h);

$lang='ru_RU.KOI8-R' # уточнить в /usr/{share,lib}/locale/

setlocale(LC_CTYPE,$lang);
setlocale(LC_COLLATE,$lang);

# Если будут потомки:
$ENV{LC_CTYPE}=$lang;
$ENV{LC_COLLATE}=$lang;

...


-- 

                      С наилучшими пожеланиями, Евгений Бырганов.
                      Best regards, Eugene Byrganov.

  mailto:E.B.Byrganov@xxxxxxxxxx
  work - http://www.inp.nsk.su/
=============================================================================
=               Apache-Talk@xxxxxxxxxxxxx mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =






Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.