Рассмотрим следующие параметры запроса
{
:param1=>"<script>alert('hi')</script>",
:param2=>"<script>alert('hi2')</script>"
}
Я хочу безопасно отобразить их как параметры запроса в ссылке. Проблема демонстрируется следующим образом:
[83] pry(main)> params
=> {:param1=>"<script>alert('hi')</script>", :param2=>"<script>alert('hi2')</script>"}
[84] pry(main)> params.to_query
=> "param1=%3Cscript%3Ealert%28%27hi%27%29%3C%2Fscript%3E¶m2=%3Cscript%3Ealert%28%27hi2%27%29%3C%2Fscript%3E"
[85] pry(main)> ERB::Util.html_escape params.to_query
=> "param1=%3Cscript%3Ealert%28%27hi%27%29%3C%2Fscript%3E&param2=%3Cscript%3Ealert%28%27hi2%27%29%3C%2Fscript%3E"
Когда params.to_query
отображается через ERB, амперсанд также экранируется. Вероятно, вы можете передать их url_for и link_to в качестве параметров запроса, но для целей этого вопроса давайте предположим, что это невозможно.
В моем случае я просто хочу, чтобы сами параметры запроса были безопасно экранированы, но не экранированы от амперсанда.