Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Regexp и UTF8


Автор: Error202 18.5.2011, 14:18
Скрипт в UTF-8
Выводит форму... 
далее проверяет введенное по шаблону
Код

^[a-zA-Zа-яА-Я0-9\_\ \-]+$


Ввожу форму: "привет"
Скрипт ругается, что введенное не соответствует шаблону...


В чем может быть проблема?


P.S. Входящая строка из формы тоже в UTF-8

P.S.2 JavaScript на форме не ругается при проверке введенного значения

Автор: Pfailed 18.5.2011, 15:36
Строка в скрипт приходит с поднятым utf флагом?

Автор: Error202 18.5.2011, 15:40
Что за флаг?

Автор: Pfailed 18.5.2011, 15:45
perldoc utf8
utf8::is_utf8
utf8::upgrade

Автор: Error202 18.5.2011, 16:12
Ставлю 

Код

Encode::_utf8_on($value);


и после отправки страницу "выворачивает" неизвестной мне кодировкой...
При этом просто форма нормально отображается...

Если ставлю use utf8; то после отправки все ок, но сама форма "выворачивается"...

Автор: Pfailed 18.5.2011, 16:16
Для начала смотрим что возвращает utf8::is_utf8 на пришедшую строку. Если ложное значение, то делаем на строке utf8::upgrade.

Автор: Error202 18.5.2011, 16:28
utf8::is_utf8 - ложное значение (непонятно только почему)
после utf8::upgrade - никаких изменений :(


Lingua::DetectCharset показывает, что введенные данные в UTF8

Автор: Pfailed 18.5.2011, 17:00
С utf8::upgrade ошибся, нужен utf8::decode.
Помимо этого регулярное выражение тоже нужно "заутээфить"
Вот пример, до utf8::decode нет совпадения, после есть.
Код

use strict;

my $str = 'Мама мыла раму';
my $regexp;
{
    use utf8;
    $regexp = qr/^[a-zA-Zа-яА-Я0-9\_\ \-]+$/;
};

$str =~ $regexp
    or warn 'failed';

utf8::decode($str);
$str =~ $regexp
    or warn 'failed';


Автор: Error202 19.5.2011, 09:01
Спасибо! Разобрался

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)