Что означает "h" в ""?
когда я создаю каркас по умолчанию, отображение тегов на шоу.формат html.Эрб есть
<%=h @broker.name %>
Я знаю разницу между <%
и <%=
. Что такое " Н " делать?
6 ответов:
html escape. Это метод, который преобразует такие вещи, как в ссылки на числовые символы, чтобы рендеринг не нарушал ваш html.
<%=h
на самом деле 2 вещи. Вы открываете тег erb (<%=
) и вызов метода Railsh
чтобы избежать всех символов.эти два вызова эквивалентны:
<%=h person.first_name %> <%= h(person.first_name) %>
The
h
метод обычно используется для экранирования HTML и Javascript из форм пользовательского ввода.
h
- это псевдоним методhtml_escape
С ERB:: Util класса.
существует также метод в стойке, чтобы избежать HTML
Rack::Utils.escape_html
в случае, если вы находитесь в металле и хотите избежать некоторых HTML.
путь поздно на вечеринку, но я добавляю дополнительное объяснение тому, что
html_escape
делает, чтобы, надеюсь, помочь другим нубам, как я, понять, что происходит. Рельсы 3 и позже автоматически экранируют все выходные данные теперь, и поэтому гораздо меньше ситуаций, когдаhtml_escape
акаh()
потребуется. Наиболее заметным из которых является, когда вы собираетесь использоватьhtml_safe
метод при построении ссылок с html в классе презентатора и т. д. Например:#some_view.html.erb <span><%= @user.name %></span> #This is 100% fine and will be automatically escaped by Rails 3+ #Output => <span>Brian Kunzig</span> #Now say we want a link with html that we need preserved! OMG WHAT ARE DO?? <%=link_to "<span><i class='fa fa-user'></i>#{@user.name}</span>".html_safe #DANGER!!!
ссылка выше может вызвать серьезные проблемы и открыть вам до всех видов XSS (межсайтовых сценариев) атак. Самый простой пример, если пользователь сохранил свое имя как
"<script>alert('omg');</script>"
а ты использовалhtml_safe
на нем это приведет к тому, что любая страница, отображающая их предполагаемое имя, получит предупреждение с надписью "omg"! Это серьезная проблема. Чтобы этого избежать сделайте:<%=link_to "<span><i class='fa fa-user'></i>#{h(@user.name)}</span>".html_safe #Winning!
экранируя потенциально испорченные данные, предоставленные пользователем, мы свободны от дома!
h - это просто псевдоним для html_escape. Это метод утилиты, обычно используемый для экранирования html и javascript из форм пользовательского ввода. Он преобразует специальные символы в ссылки на числовые символы, чтобы рендеринг не нарушал ваш html.
С<%= h "<p>Hello World</p>" %>
выводит
<p>Hello World</p>
как текст для просмотра, абзац не будет применяться. он будет закодирован как
<p>Hello World</p>.