динамически отображать строки как html

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

У меня есть входные данные, которые могут быть либо строкой, либо строкой html. Я выяснил, как распознать, является ли строка html, но я не знаю, как заставить браузер интерпретировать строку как html вместо этого.

Например, вместо того, чтобы иметь <a href='www.google.com'> Click here!! </a> на странице, я бы хотел, чтобы фактическая ссылка отображалась следующим образом: Нажмите здесь

Просмотрите код, в котором я пытаюсь это сделать:

 <div class="description">    
  <%= p.description %>
<div>
  

Комментарии:

1. не могли бы вы вставить свой код просмотра?

2. Конечно, я добавил строку, где я пытаюсь это сделать.

Ответ №1:

Вам нужно пометить строку как «безопасную для html» одним из двух способов:

 <%= raw @string %>
  

… или явно пометив строку как html_safe:

 <%= @string.html_safe %>
  

Однако: Пожалуйста, имейте в виду, что если эти входные данные поступают от ненадежных пользователей (т. Е. от кого угодно, кроме вас!), то это может быть рискованной стратегией, поскольку она допускает атаки с использованием межсайтовых скриптов. Обязательно прочтите руководство по безопасности в rails для получения дополнительной информации об этом риске и о том, как эффективно его снизить.

Комментарии:

1. очень сложно выбрать между этими двумя ответами. оба очень информативны и полезны. выбираю этот вариант из-за советов по безопасности. Я об этом не подумал. Опять же, я не думаю о безопасности так много, как следовало бы

Ответ №2:

Похоже, вам нужно использовать raw helper, если ваш код выглядит следующим образом:

 @your_bit_of_html = '<a href="www.google.com"> Click here!! </a>'
  

Тогда ваш view ERB должен выглядеть следующим образом:

 <%= raw @your_bit_of_html %>
  

И теперь, когда вы включили образец вашего ERB:

 <div class="description">    
  <%= raw p.description %>
<div>
  

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

Комментарии:

1. Ссылка на rubyonrails.org больше недопустимо.

2. @TrueSoft: Спасибо, я обновил его, чтобы он соответствовал текущему местоположению raw помощника.