Помощник URL-адресов Rails не кодирует амперсанды

Итак, я пытаюсь использовать помощник URL Rails ( page_url ) для создания URL-адресов, содержащих специальные символы, включая амперсанды. В большинстве случаев они работают так, как вы ожидаете:

(rdb:1) page_url('foo', :host => 'host')
"http://host/pages/foo"
(rdb:1) page_url('foo_%_bar', :host => 'host')
"http://host/pages/foo_%25_bar"

Но по какой-то странной причине амперсанды не экранируются:

(rdb:1) page_url('foo_&_bar', :host => 'host')
"http://host/pages/foo_&_bar"

И если я их экранирую заранее, они быть поврежденным:

(rdb:1) page_url('foo_%26_bar', :host => 'host')
"http://host/pages/foo_%2526_bar"

CGI :: escape , с другой стороны, отлично ускользает от них:

(rdb:1) CGI::escape('foo_&_bar')
"foo_%26_bar"

Что происходит и как мне обойти это? (С помощью чего-то более приятного, чем gsub ('& ','% 26 ') , то есть. )

11
задан Makoto 18 October 2013 в 04:45
поделиться