edbond
1
Hello All,
How to make rails unescape incoming urls? I want to use russian chars
in routes, like:
map.city URI.escape(“/Карта–:title–:id”), :controller =>
“cities”, :action => “show” It seems to works (page loads) but all
links on page looks like this:
http://localhost/%25D0%259A%25D0%25B0%25D1%2580%25D1%2582%25D0%25B0--Киев--30295?page=4
Rails double escapes url?
Also I tried url_for(… :escape => false), it doesn’t help.
Thanks in advance,
Eduard
edbond
2
SOLVED:
double escape fix
skip escaping of already escaped value
ActionController::Routing::Segment.class_eval(<<-FIX, FILE,
LINE+1)
def interpolation_chunk
value.include?(’%’) ? value : URI.escape(value, UNSAFE_PCHAR)
end
FIX
Best regards to All,
Eduard
edbond
3
edbond
4
err,
to work properly you need to change other constants too.
Add this at top of your routes.rb:
ActionController::Routing::Segment.class_eval(<<-FIX, FILE,
LINE+1)
RESERVED_PCHAR=’:@&=+$,;%’
SAFE_PCHAR = “#{URI::REGEXP::PATTERN::UNRESERVED}#
{RESERVED_PCHAR}”
UNSAFE_PCHAR = Regexp.new("[^#{SAFE_PCHAR}]", false, ‘N’).freeze
FIX