Так как кажется, что вы можете конвертировать отдельные символы по мере необходимости (в кодировку cp-1252), один из способов заключается в том, чтобы обрабатывать символ за символом, как это предлагается, когда слово не проходит процедуру.
\X
в регулярном выражении Perl соответствует логическому символу Unicode, расширенному кластеру графем , либо как одна кодовая точка, либо как последовательность. Так что если вы действительно можете преобразовать все отдельные (логические) символы в нужную кодировку, то с помощью
while ($word =~ /(\X)/g) { ... }
вы можете получить доступ к логическим символам и применить свою рабочую процедуру к каждому.
В случае, если вы не можете обработать все логические символы, которые могут появиться, соедините эквивалент \X
, используя специфические свойства символов , для более тонкой детализации с комбинированием меток или тому подобного (например, /((.)\p{Mn}?)/
или \p{Nonspacing_Mark}
). Полный, большой, список находится в perluniprops .
Ваша проблема - это: пользователь сначала посещает /login
и заполняет форму. Когда они отправляют форму, они POST к /sessions
, который является, почему URL браузера изменяется. Для обхождения этого, можно сделать две вещи:
Как Michael упомянул, можно перенаправить назад к: новое действие, еще изменяясь на:
else
flash[:warning] = "The email and/or password you entered is invalid."
redirect_to login_path
end
Обратите внимание, что необходимо будет изменить флэш-память, таким образом, сообщение будет доступно в следующем запросе (после перенаправления).
Второй метод немного hackier, но возможно стоящий упоминания. При помощи условий на Ваших маршрутах можно отобразить обоих форма входа в систему (который является ПОЛУЧЕНИЕМ), и форма отправляют (который является POST) к тому же пути. Что-то как:
map.login '/login',
:controller => 'sessions', :action => 'new',
:conditions => {:method => :get}
map.login_submit '/login',
:controller => 'sessions', :action => 'create',
:conditions => {:method => :post}
Затем, если Ваше действие формы является входом в систему, отправляют путь, вещи должны работать, как Вы ожидаете.
Изменение render :action => 'new'
кому: redirect_to login_path