raw vs. html_safe против h для unescape html

Предположим, что у меня есть следующая строка

@x = "Turn me into a link" 

На мой взгляд, я хочу, чтобы отображалась ссылка. То есть, я не хочу, чтобы все в @x было unescaped и отображалось как строка. В чем разница между использованием

    

?

Учитывая Rails 3:

html_safe фактически «устанавливает строку» как HTML Safe (это немного сложнее, но в основном это). Таким образом, вы можете возвращать безопасные строки HTML из помощников или моделей по своему усмотрению.

h может использоваться только из controllerа или вида, так как это от помощника. Это заставит выход быть экранированным. Это не очень устарело, но вы, скорее всего, больше не будете его использовать: единственное использование – это «вернуть» объявление html_safe , довольно необычное.

Преrotation выражения с помощью raw на самом деле эквивалентно вызову to_s с html_safe на нем, но объявляется в помощнике, как h , поэтому его можно использовать только для controllerов и представлений.

« SafeBuffers and Rails 3.0 » – хорошее объяснение того, как SafeBuffer s (class, который html_safe магию html_safe ).

Я думаю, что это повторяется: html_safe не поддерживает HTML-строку. Фактически, это предотвратит экранирование вашей строки.

 <%= "" %> 

поставит:

 <script>alert('Hello!')</script> 

в ваш HTML-источник (yay, так безопасно!), в то время как:

 <%= "".html_safe %> 

появится диалоговое окно предупреждения (вы уверены, что это то, что вы хотите?). Поэтому вы, вероятно, не хотите вызывать html_safe для любых введенных пользователем строк.

Разница между Rails ‘ html_safe() и raw() . На этом есть отличный пост Иегуды Кац, и это действительно сводится к следующему:

 def raw(stringish) stringish.to_s.html_safe end 

Да, raw() – это shell вокруг html_safe() которая заставляет вход в String, а затем вызывает html_safe() . Это также случай, когда raw() является помощником в модуле, тогда как html_safe() является методом classа String, который создает новый экземпляр ActiveSupport :: SafeBuffer, который имеет в @dirty флаг @dirty .

См. « Rails» html_safe против raw ».

  1. html_safe :

    Помечает строку как надежный сейф. Он будет вставлен в HTML без дополнительной эвакуации.

     "Hello".html_safe #=> "Hello" nil.html_safe #=> NoMethodError: undefined method `html_safe' for nil:NilClass 
  2. raw :

    raw – это всего лишь обертка вокруг html_safe . Используйте raw если есть вероятность, что строка будет nil .

     raw("Hello") #=> "Hello" raw(nil) #=> "" 
  3. h псевдоним для html_escape :

    Утилита для экранирования символов HTML-тегов. Используйте этот метод, чтобы избежать любого небезопасного содержимого.

    В Rails 3 и выше используется по умолчанию, поэтому вам не нужно явно использовать этот метод

Лучший безопасный способ: <%= sanitize @x %>

Это позволит избежать XSS!

В терминах Simple Rails:

h удалять html-tags в числовые символы, чтобы рендеринг не нарушал ваш html

html_safe устанавливает логическую строку в строке, так что строка считается html save

raw Он преобразуется в html_safe в строку

  • curl: (1) Протокол https не поддерживается или отключен в libcurl
  • Rails 3: Как «redirect_to» в вызове Ajax?
  • Rails 4: организовать модели рельсов в подпути без шаблонов имен?
  • form_for с вложенными ресурсами
  • Общее решение Ruby для SQLite3 «LIKE» или PostgreSQL «ИЛИКЕ»?
  • GroupingError: ERROR: столбец должен отображаться в предложении GROUP BY или использоваться в агрегатной функции
  • Ruby: SQLite3 :: BusyException: firebase database заблокирована:
  • link_to и remote => true + jquery: Как? Помогите?
  • undefined метод `get 'для #
  • Не удается найти клиентскую библиотеку PostgreSQL (libpq)
  • Установка жгута PG на OS X - невозможность создания собственного расширения
  • Давайте будем гением компьютера.