#ruby-on-rails
#ruby-on-rails
Вопрос:
Код контроллера:
class HelpController<ApplicationController
def index
@url = "https://example.com/auth?user_id=1234amp;redirect_to=http://google.ru"
end
end
Просмотр кода:
<script>location.href='<%=@url%>';</script>
И он перенаправляет на ЭТО:
example.com/auth?user_id=1234amp;amp;redirect_to=http://google.ru
Это:
http://example.com/auth?user_id=1234 amp; amp; redirect_to =http://google.ru
(без пробелов)
Ответ №1:
В Rails 3 вы можете вызвать метод .html_safe, чтобы сообщить rails, что вы подтвердили, что содержимое безопасно отправлять без экранирования.
Смотрите http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0 / для объяснения мотивации поведения экранирования по умолчанию.
Идиома, обратная более старым версиям rails, где вам приходилось явно вызывать .h (.html_escape).
Комментарии:
1. Я думал, что это называется «safe_html» = D
Ответ №2:
Нет эксперта по Ruby, но я думаю, что экранирование — это поведение по умолчанию. Вы должны принудительно вывести его в виде неэкранированной строки, обернув ее в raw()
.