#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
помощника.