Поэтому я пытаюсь использовать вспомогательный 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')
, то есть.)