Я знаю, что на этот вопрос уже получен ответ, но то, что я хотел, было чем-то немного другим, и я подумал, что я мог бы также опубликовать это: я хотел оставить "/" в URL, но избежать всех других нестандартныхперсонажи.Я сделал это так:
#public filename is a *nix filepath,
#like `"/images/isn't/this a /horrible filepath/hello.png"`
public_filename.split("/").collect{|s| ERB::Util.url_encode(s)}.join("/")
=> "/images/isn%27t/this%20a%20/horrible%20filepath/hello.png"
Мне нужно было избегать одинарных кавычек, когда я писал аннулирование кэша для AWS Cloudfront, которому не нравились одинарные кавычки и ожидалось, что они будут экранированы.Вышеприведенное должно создать URI, который более безопасен, чем стандартный URI.escape, но который по-прежнему выглядит как URI (CGI Escape нарушает формат URI, экранируя "/").