![]() |
транситерация в перле
Привет всем!
Люди, помогите решить проблемку. Вот такая задача: нужно заменить (транслитеровать) все символы в в шестнадцетричном формате. из диапазона %C0-%DF в диапазон %E0-%FF. типа $string=~tr/%C0-%DF/%E0-%FF/; но это неработает, как сделать это праильно? И ещё такой вопрос, как мне перевести допустим русскую букву в шестнадцетиричный форма? сделать её типа %ED? Думаю понятно что мне нужно... :) |
Попробуй так :
$string =~ tr#\xC0-\xDF#\xE0-\xFF# |
нет... не получается так.......
|
nemra
1. А у меня получается : Код:
$string = "\xC0abcd";Цитата:
Код:
|
да...... то что то сделал получается :)
вот смотри мне что надо... поможешь? Есть форма на сайте, сервер, на котором находится сайт, не поддерживает "locale", то есть я не могу получить данные из формы на русском языке, перевести их в нижний регистр, отсортировать, и выдать результат в уже нижнем регистре. Вот я и подумал сделать так, получить данные из формы типа -%CA%D3%CA%D3, потом скриптом транситерации перенести всё в нижний регистр. Как будет выглядеть скрипт в этом случае? Подскажешь? или можно как-то подругому решить эту проблему? что посоветуешь? Заранее спасибо! :) |
nemra
Подробнее опиши задачу: какой сервер, платформа, какой и куда результат, какая сортировка. Если начал писать - пришли код. P.S. Похожие вещи я делал, использовал функцию CGI::Util::unescape(). |
хорошо. попытаюсь описать подробнее :)
так вот, скажу что надо. Я хостюсь на платном сервере под Линукс, но это не так важно. Я сделал скрипт, проверил его дома под виндос, на сервере апаче, типа: ==================== #!/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. никогда не писал так много.... :rolleyes: |
Да, задачка не простая. Ну вот попробуй, что получилось :
Код:
$input = "VaSiA%C2%C0%D1%DF"; # VaSiAВАСЯ |
| Часовой пояс GMT +4, время: 00:09. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.