Используя Rails 3.0.6, я обнаружил, что в представлении, если я делаю
content_for :food_name, "Macaroni & Cheese"
Затем, когда я получу его обратно с помощью content_for(:food_name)
, &
будет преобразовано в &
уже.Не имеет значения, если я сделаю content_for(:food_name).html_safe
, &
все еще будет превращен в &
.
Но если сделать это следующим образом, то он не будет экранирован:
content_for :food_name, "Macaroni & Cheese".html_safe
В этом случае &
не изменится на &
автоматически.Теперь, поскольку есть места, где я на самом деле делаю #{h content_for(:food_name)}
, и он будет дважды экранирован (чтобы стать &
), или , потому что у меня есть значения в описании <meta>
, будет странно назвать h
для некоторых значений и не вызывать его для некоторых других значений .
Кроме того, один большой улов - , если он автоматически сбегает, и что, если я добавлю " - come see us!"
в его конеци положитесь на Rails 3, чтобы уйти от него, теперь &
дважды экранируется .
В content_for
документах:
http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for
Я не вижу такого описания.Итак, правильное ли приведенное выше описание или документы более правильные - что на самом деле нет автоматического выхода из HTML?
Похоже, из исходного кода на вышеуказанной веб-странице content_for
вызывает capture
,и он делает ERB::Util.html_escape
, так что на самом деле существует автоматический побег, но должен ли он действительно быть и почему?Также не задокументировано, что capture
выполняет автоматический побег?