Ответ 1
Вы можете попробовать следующее:
ActionView::Base.full_sanitizer.sanitize(@string)
См. strip_tags (html).
Скажем, у меня есть:
@string = "it is a <a href="#">string</a>"
Я хочу использовать его в разных частях моего приложения двумя способами:
Первое можно сделать, используя html_safe
:
@string.html_safe
Это строка
Как я могу достичь второго?
Это строка.
Вы можете попробовать следующее:
ActionView::Base.full_sanitizer.sanitize(@string)
См. strip_tags (html).
Вы можете попробовать следующее:
strip_tags(@string)
Вы можете использовать nokogiri
, чтобы сделать то же самое.
Этот SO post рассказывает историю.
Короче говоря:
Здесь используется функция XPath starts-with
:
Вы должны сначала определить его так:
require 'nokogiri'
item = Nokogiri::HTML('<a href="#">string</a>')
puts item.to_html
Вышеизложенное даст html-выход. Затем вы можете использовать XPath.
item.search('//a[not(starts-with(@href, "http://"))]').each do |a|
a.replace(a.content)
end
puts item.to_html
Для общего использования (например, веб-скребок):
puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello
В Rails см. также метод strip_tags. http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
Rails предоставляет метод под названием strip_links
, который, кажется, делает то, что вы хотите (глядя на его имя).
Согласно своей странице APIDock, она немного ограничена. Чтобы сделать его применимым к любой строке, вы можете расширить класс строки:
class String
def strip_links
ActionController::Base.helpers.strip_links(self)
end
end
Итак, вы можете использовать:
@string.strip_links