| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Поиск диактрических символов |
| Автор: korob2001 2.8.2005, 21:28 |
| Привет!!! Столкнулся с такой проблемой, программа получает данные из формы, затем данные очищаются, под такой шаблон qr/^[A-Za-z0-9\s-]+$/. Всё вроде нормально, но мне если пользователь вводит символ, например из французского алфавита é или ê или символ нидерландского языка ë, то очистка работает не верно. Вобщем если вводить такой символ напрямую в шаблон, то файл не сохраняется как текстовый и сообщает о том, что нужно сохранить его в формате Unicode. Если кто-нить знает как решить такую проблему, буду очень благодаре. Спасибо. |
| Автор: chaos 3.8.2005, 06:29 |
| не уверен, но все же, англ алфавит имеет коды 65(A)-90(Z) 97(a)-122(z) 48(0)-57(9) 45(-) 32(\s) может тебе такое подойдет? $str =~ s/[\x21-\x2C\x2E-\x2F\x3A-\x40\x5B-\x60\x7B-\xFF]//g; или как-нибудь так $str =~ s/[^a-zA-Z0-9\s-]//g; |
| Автор: wladk 3.8.2005, 17:59 | ||||
Почему не верно?
А что если сначала прогнать всю строку через escapeHTML а уже потом производить очистку? Добавив необходимые символы в шаблон. |
| Автор: korob2001 4.8.2005, 02:59 | ||
Вобщем, что бы не эксперементировать на разных примерах, написал такой тестовый код:
Вот мне собственно нужно передать подпрограмме очистки переменной шаблон, который будет чистить слова латинского алфавита + диактрические символы. Вот например Бельгия на нидерландском языке пишется так België, вот мне её и нужно пропустить, а так же символы французского и немецкого языков, но о них позже, для начала хотя бы символ ë пропустить. Вот например если я в выше приведённой форме введу слово België, то после перезагрузки старницы у меня в текстовом поле вообще последний символ заменяется на л, т.е. в текстовом поле теперь уже не België, а Belgiл. PS: Спасибо за советы, сейчас буду пробовать ещё. |
| Автор: chaos 4.8.2005, 06:40 |
| может быть что-то от сюда поможет http://www.ahinea.com/en/tech/perl-unicode-struggle.html |
| Автор: Bolt 4.8.2005, 10:34 |
| korob2001 use bytes? or use Encode qw(encode_utf8) if perl -v > 5.6 |
| Автор: sharq 16.8.2005, 12:47 |
| korob2001 просто необходимо расширить шаблон qr/^[A-Za-zёéê0-9\s-]+$/. |
| Автор: chaos 16.8.2005, 13:49 | ||
ёéê не сохранить в текстовом файле!!! |
| Автор: sharq 16.8.2005, 18:02 | ||
chaos
с этим я согласен, поспешил. С буквой ё - не согласен. |
| Автор: korob2001 16.8.2005, 22:14 |
| Дело в том, что в Нидерландской винде все эти символы успешно сохраняются, в текстовые файлы, зато теряется возможность сохранять кирилицу, точнее она есть, но только как Unicode. Наверное прийдётся отказаться от русской винды или вообще от винды. |
| Автор: sharq 17.8.2005, 13:53 | ||
korob2001 вот вариант:
|
| Автор: korob2001 17.8.2005, 20:29 |
| sharq - да, но здесь проблема в том, что в данном варианте мы в программном коде устанавливаем этот символ. Пользователь же вводит это значение в форму, вот попробуй вставить его в код, который я привёл выше, а затем введи в форму этот символ. |
| Автор: sharq 17.8.2005, 20:49 | ||
korob2001
какая разница, если это значение (код) этого символа в Юникоде? Если пользователь введет букву ё (ту, что в кириллице есть), то это буква будет иметь другой код в юникоде - \x0451. Я, конечно, попробую, только вот раскладку поменяю... |