у меня есть
@str = "<b>Hi</b>"
и по моему мнению:
<%= @str %>
Что будет отображаться на странице: <b>Hi</b>
когда я действительно хочу Привет . Что такое рубиновый способ «интерпретировать» строку как разметку HTML?
Изменить : случай, когда
@str = "<span class=\"classname\">hello</span>"
Если, на мой взгляд, я делаю
<%raw @str %>
Исходный код HTML - это <span class=\"classname\">hello</span
то, где я действительно хочу <span class="classname">hello</span>
(без обратной косой черты, которой не хватает двойных кавычек). Какой лучший способ "убрать" эти двойные кавычки?
%Q["quotation marks"] => "\"quotation marks\""
источник: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… Не знаю, поможет ли это.Ответы:
ОБНОВИТЬ
По соображениям безопасности рекомендуется использовать
sanitize
вместоhtml_safe
. Ссылка на сайтПроисходит то, что в качестве меры безопасности Rails избегает вашей строки за вас, потому что в нее может быть встроен вредоносный код. Но если вы скажете Rails, что ваша строка есть
html_safe
, она пройдет через нее.ИЛИ
Использование
raw
отлично работает, но все, что он делает, это конвертирует строку в строку, а затем вызывает html_safe. Когда я знаю, что у меня есть строка, я предпочитаю вызывать html_safe напрямую, потому что он пропускает ненужный шаг и проясняет, что происходит. Подробная информация о экранировании строк и защите XSS находится в этом Asciicast .источник
raw
. Очень рад узнать об этом!Используйте сырье :
Но, как правильно говорит @ jmort253, подумайте, где на самом деле принадлежит HTML.
источник
Если вы
rails
используете Erubis - самый крутой способ сделать этоОбратите внимание на двойной знак равенства. См. Связанный вопрос на SO для получения дополнительной информации.
источник
Вы также можете использовать
simple_format(@str)
который удаляет вредоносный код. Подробнее читайте здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatисточник
Вы смешиваете свою бизнес-логику с вашим контентом. Вместо этого я бы порекомендовал отправить данные на вашу страницу, а затем использовать что-то вроде JQuery, чтобы поместить данные туда, куда вам нужно.
Это дает преимущество, заключающееся в том, что весь ваш HTML-код хранится на тех HTML-страницах, к которым он относится, поэтому ваши веб-дизайнеры могут позже изменить HTML-код без необходимости пролистывать код на стороне сервера.
Или, если вы не хотите использовать JavaScript, вы можете попробовать это:
По крайней мере, так ваш HTML находится на странице HTML, где он принадлежит.
источник
Или вы можете попробовать метод CGI.unescapeHTML .
источник
поскольку вы переводите и выбираете нужный код из дрянного закодированного файла, можете ли вы использовать content_tag в сочетании с вашим регулярным выражением.
Кража из api docs, вы можете интерполировать этот переведенный код в
content_tag
как:Не зная вашего кода, такое мышление сделает ваш переведенный код слишком совместимым.
источник
Решение: используйте двойные кавычки внутри одинарных кавычек (или одинарные внутри двойных), чтобы избежать обратной косой черты.
источник
Версия html_safe хорошо работает в Rails 4 ...
источник