Что означает "h" в ""?


когда я создаю каркас по умолчанию, отображение тегов на шоу.формат html.Эрб есть

<%=h @broker.name %>

Я знаю разницу между <% и <%=. Что такое " Н " делать?

6 58

6 ответов:

html escape. Это метод, который преобразует такие вещи, как в ссылки на числовые символы, чтобы рендеринг не нарушал ваш html.

<%=h на самом деле 2 вещи. Вы открываете тег erb (<%=) и вызов метода Rails h чтобы избежать всех символов.

эти два вызова эквивалентны:

<%=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>

как текст для просмотра, абзац не будет применяться. он будет закодирован как

&lt;p&gt;Hello World&lt;/p&gt;.