Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> русские слова в url, как перекодировать, в латинские символы? 
:(
    Опции темы
Rusjonny
Дата 1.1.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.1.2006

Репутация: нет
Всего: нет



smile топик убрал,помощь ниже,спасибо korob2001 дельный совет!

Это сообщение отредактировал(а) Rusjonny - 3.1.2006, 15:50
PM MAIL   Вверх
frenkys
Дата 2.1.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 18.6.2005

Репутация: 1
Всего: 1



А ты не пробывал названия хранть в мускульной базе и каждому названию присвоить ID и по єтому ID отображать все
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
Rusjonny
Дата 2.1.2006, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.1.2006

Репутация: нет
Всего: нет



я бы с удовольствием,пока знаний не хватает,мне самому не осилить написать :-)
тут литературки накачал,изучаю....

Это сообщение отредактировал(а) Rusjonny - 2.1.2006, 02:35
PM MAIL   Вверх
korob2001
Дата 2.1.2006, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата

Как сделать,что бы все набранное через вэб интерфейс, пользователями, перекодировать в латинские символы, а при обращении к странички или файлам, вернуть русские названия?

А зачем тебе это нужно? Воспользуйся возможностями XML, работать будет на порядок быстрее (даже если заюзать базу), да и всегда можно будет добавить поддержку других языков, если это будет нужно. smile
Например:
Код

<?xml version="1.0" encoding="utf-8"?>
<photobook-document version="1.0" timestamp="2006-01-01 3:17:00">
        <book id="23355236626165465223">
                 <ru>
                        <title>Новый год 2006</title>
                        <description>Это тестовый фотоальбом. Создан только для теста.</description>
                 </ru>
                 <en>
                        <title>New year 2006</title>
                        <description>This is a test photo album. Created only for test</description>
                 </en>
       </book>
       <book id="23355236626165465224">
                 <ru>
                        <title>Старый год 2005</title>
                        <description>Это второй тестовый фотоальбом. Создан только для теста.</description>
                 </ru>
                 <en>
                        <title>The old year 2005</title>
                        <description>This is a second test photo album. Created only for test</description>
                 </en>
       </book>
       <book id="23355236626165465225">
                 <ru>
                        <title>Италия 2003 год</title>
                        <description>Это третий тестовый фотоальбом. Создан только для теста.</description>
                 </ru>
                 <en>
                        <title>Italy 2003</title>
                        <description>This is a third test photo album. Created only for test</description>
                 </en>
       </book>   
</photobook-document>

Сохраним это дело в файл с именем PhotoBook.xml, в кодировке UTF-8
Теперь пишем такую CGI программу:
Код

#!/usr/bin/perl -w
use strict;
use XML::Simple;
use Text::Iconv;
use CGI;

# Путь к XML файлу
my $file = "/home/localhost/www/xmls/PhotoBook.xml";

# Создаём объекты CGI и Text::Iconv
my $conv = Text::Iconv->new("UTF-8", "WINDOWS-1251");
my $cgi  = CGI->new();

# Получаем данные из XML файла
my $xml = XMLin($file);

# Получаем параметры
my $lang = $cgi->param('lang') || "ru";
$lang = "ru" if ($lang ne "en");
my $id   = $cgi->param('id') || "";
$id = "" unless ( exists( %$xml->{book}{$id} ) );

 # Здесь разумнее воспользоваться XML, но для того, что бы его не перегружать,
 # что-бы проще было объяснить, я воспользовался обычными скалярными переменными.
 my($t1, $t2, $t3, $t4, $t5);
 if ( $lang eq "ru" ) {
      $t1 = "Название альбома";
      $t2 = "Описание альбома";
      $t3 = "Все альбомы";
      $t4 = "Английская версия";
      $t5 = "Всего альбомов";
 } else {
      $t1 = "Title of album";
      $t2 = "Description of album";
      $t3 = "All albums";
      $t4 = "Russian version";
      $t5 = "Total albums";
 }

# Выводим заголовок с нужно кодировкой, в зависимости от языка
print $lang eq "ru" ? $cgi->header( -charset => "windows-1251" ) : $cgi->header();

# Показываем информацию об альбоме, если указан реальный id
if ( $id ) {
     print $cgi->start_html( -title => "Album '" . $conv->convert($xml->{book}{$id}{$lang}{title}) . "'");
     print $cgi->b( $t1 . ": ");
     print $cgi->font( $conv->convert($xml->{book}{$id}{$lang}{title}) );
     print $cgi->br();
     print $cgi->b( $t2 . ": ");
     print $cgi->font( $conv->convert($xml->{book}{$id}{$lang}{description}) );
     print $cgi->hr();
     print $cgi->b( $t3 . ": ");
}

print $cgi->br();

# Переменная счётчик
my $count = 0;

# Выводим ссылки на все имеющиеся альбомы
foreach my $book ( keys %{$xml->{book}} ) {
    print $cgi->a( { -href => $cgi->url( -relative => 1 ) . "?id=$book&lang=$lang",
                     -style => "color: #0000aa" }, $conv->convert($xml->{book}{$book}{$lang}{title}));
    print $cgi->br();
    ++$count;
}

print $cgi->hr();

# Выводим общее число альбомов
print $cgi->b( $t5 . ": ");
print $cgi->font( $count );
print $cgi->hr();

# Делаем инверсию языка
if ( $lang eq "ru" ) {
     $lang = "en";
} else {
     $lang = "ru";
}

# Выводим ссылку на версию страницы на другом языке
print $cgi->a( { -href => $cgi->url( -relative => 1 ) . "?id=$id&lang=$lang",
                 -style => "color: #aa0000" }, $t4 );

# Завершаем генерацию HTML файла
print $cgi->end_html();

Теперь запускай CGI программу и наблюдай, сколько возможностей нам даёт простенький XML. Также обрати внимание, что если понадобится поддержка ещё одного или нескольких языков, то достаточно просто добавить ещё один или несколько блоков <сокращение-языка></сокращение-языка>, в блок <book></book>, нашего xml и немного подправить программу, так как я жёстко запрограммировал её на 2 языка. С другой стороны можно было бы создать список из всех возможных языков и при добавлении нового языка, заносить в него новый язык, всё остальное программа будет делать за тебя (вобщем гибко запрограммировать). Но это уже тонкости, если тебе будет нужно, то думаю ты разберёшься с этим. К тому же никогда не поздно задать конкретный вопрос в этом же разделе.

Так же прошу обратить внимание на то, что я, для простоты изложения в блоках <ru></ru><en></en> я храню только данные Заголовка и Описания. В них можно добавить так же и другие данные, если они нужны.

Удачи тебе и С новым годом. smile

Это сообщение отредактировал(а) korob2001 - 2.1.2006, 05:32


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Rusjonny
Дата 2.1.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.1.2006

Репутация: нет
Всего: нет



Спасибо! Действительно так лучше :-) С наступившим!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0797 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.