Content_for Ruby on Rails сделает автоматический переход HTML? - PullRequest
4 голосов
/ 28 апреля 2011

Используя 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

В этом случае & не изменится на &amp; автоматически.Теперь, поскольку есть места, где я на самом деле делаю #{h content_for(:food_name)}, и он будет дважды экранирован (чтобы стать &amp;amp;), или , потому что у меня есть значения в описании <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 выполняет автоматический побег?

1 Ответ

3 голосов
/ 28 апреля 2011

Используйте <%= raw some_stuff %>, если вы не хотите, чтобы Rails экранировал эти символы, в противном случае используйте простой вызов.

Вы всегда знаете области, где контент может быть таким, который может быть изменен при выходе из него, так что вы можете просто вписаться в raw в этих местах.

Для получения дополнительной информации обратитесь к этой действительно замечательной статье Yehuda katz.
safebuffers-and-rails-3-0

...