Итак, я пытаюсь использовать хелпер 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')
, то есть.)