imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 17.02.2004, 11:10     # 1
nemra
Guest
 
Сообщения: n/a

транситерация в перле

Привет всем!
Люди, помогите решить проблемку.
Вот такая задача: нужно заменить (транслитеровать) все символы в в шестнадцетричном формате. из диапазона %C0-%DF в диапазон %E0-%FF.
типа $string=~tr/%C0-%DF/%E0-%FF/; но это неработает, как сделать это праильно? И ещё такой вопрос, как мне перевести допустим русскую букву в шестнадцетиричный форма? сделать её типа %ED?
Думаю понятно что мне нужно...
 
Старый 17.02.2004, 11:31     # 2
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
Попробуй так :
$string =~ tr#\xC0-\xDF#\xE0-\xFF#
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.
rontommy вне форума  
Старый 17.02.2004, 12:47     # 3
nemra
Guest
 
Сообщения: n/a

нет... не получается так.......
 
Старый 17.02.2004, 13:30     # 4
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
nemra

1. А у меня получается :
Код:
$string = "\xC0abcd";
$string =~ tr#\xC0-\xDF#\xE0-\xFF#;
print "res=$string=\n";
2.
Цитата:
nemra:
И ещё такой вопрос, как мне перевести допустим русскую букву в шестнадцетиричный форма? сделать её типа %ED?
Код:
 
$hex = '\\x' . sprintf "%1x", ord 'a'; # result is '\x61'
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.

Последний раз редактировалось rontommy; 17.02.2004 в 13:33.
rontommy вне форума  
Старый 17.02.2004, 14:35     # 5
nemra
Guest
 
Сообщения: n/a

да...... то что то сделал получается
вот смотри мне что надо... поможешь?
Есть форма на сайте, сервер, на котором находится сайт, не поддерживает "locale", то есть я не могу получить данные из формы на русском языке, перевести их в нижний регистр, отсортировать, и выдать результат в уже нижнем регистре. Вот я и подумал сделать так, получить данные из формы типа -%CA%D3%CA%D3, потом скриптом транситерации перенести всё в нижний регистр. Как будет выглядеть скрипт в этом случае? Подскажешь? или можно как-то подругому решить эту проблему? что посоветуешь? Заранее спасибо!
 
Старый 17.02.2004, 15:38     # 6
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
nemra
Подробнее опиши задачу:
какой сервер, платформа, какой и куда результат, какая сортировка.
Если начал писать - пришли код.

P.S. Похожие вещи я делал, использовал функцию CGI::Util::unescape().
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.
rontommy вне форума  
Старый 17.02.2004, 17:43     # 7
nemra
Guest
 
Сообщения: n/a

хорошо. попытаюсь описать подробнее
так вот, скажу что надо. Я хостюсь на платном сервере под Линукс, но это не так важно. Я сделал скрипт, проверил его дома под виндос, на сервере апаче, типа:

====================
#!/usr/bin/perl

use locale;

$string="РусКий ТекСт";
$string=lc($string);

print "content-type: text/html\n\n";
print "<html>";
print $string
print "<html>";
====================


Всё нормально заработало, все все русские буквы поменялись в нижний регистр. Потом перенёс его на тот сервер, где находиться сайт, там это не сработало, работает только с латиницей, с русским ноль реакции. Покопался в форумах, полазил в инете, оказалось что на сервере должна быть установлена какая-то локаль и поддержка русского, ну это я не могу сделать... сервер платный, не мой так вот, задача в том, что я пишу чат, на перле, и сейчас делаю регистрацию пользоватлей. На англ. прблем нет, вводится ник, я все ники перевожу в нижний регистр и сравниваю, есть ли такой ник или нет и если нет, то регистрация происходит. С руссим проблема, так как допустим ник "Вася", "вАся", ВАсЯ" и т.д., все они, получается, что разные ники, нужно чтобы это считался как один. Поэтому хочу, чтобы перед регистрацие ник переводился в нижний регистр, и так сохранялся в базе (база простой текстовый файл). Вот проблема в том, что я не могу переносить в нижний регистр.... Я и подумал, что буду получать ник, через html форму, ник на руском получаю в формате типа - %C2%C0%D1%DF. Это слово "ВАСЯ" в вернем регистре, потом надо его перенести в нижний регистр, сравнить с базой, есть ли такой ник или нет (так как в базе будут храниться ники только в нижнем регистре), и зарегестрировать если такого ника нет. А без это получиться что ВАСЯ и вася это разные ники.... мне это не надо... Понимаете в чём дело? ))) Что можно сделать? Как? вот диапазон [А-Я] это [%C0-%DF] а маленьких букв [а-я] это [%E0-%FF]. вот и думал получить строку на русском в формате %C2%C0%D1%DF и заменить все слова с верхнего регистра на буквы в нижнем, и потом делат то что нужно..... Как можно работать с русскими буквами, сортррвать их, менять регистры в этом случае, как решить эту проблему?

P.S. никогда не писал так много....
 
Старый 17.02.2004, 20:25     # 8
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
Да, задачка не простая. Ну вот попробуй, что получилось :

Код:
$input = "VaSiA%C2%C0%D1%DF"; # VaSiAВАСЯ
$s = $input;
$s =~ s/%([0-9a-fA-F]{2})/chr hex($1)/ge; # convert to char
$hex = lc $s; # low case ascii chars
$hex =~ tr#\xC0-\xDF#\xE0-\xFF#; # low case non-ascii chars
$out = $hex;
$out =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; # URL-encode data
print "input=$input\nhex=$hex\nout=$out\n";
# My output in UNIX :
# input=VaSiA%C2%C0%D1%DF
# hex=vasiaâàñÿ
# out=vasia%E2%E0%F1%FF
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.
rontommy вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:15.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.