Подтвердить что ты не робот

Как удалить HTML-разметку из строки

Скажем, у меня есть:

@string = "it is a <a href="#">string</a>"

Я хочу использовать его в разных частях моего приложения двумя способами:

  • С помощью интерактивной ссылки
  • Без ссылки на клики (но не отображающей разметку HTML)

Первое можно сделать, используя html_safe:

@string.html_safe

Это строка

Как я могу достичь второго?

Это строка.

4b9b3361

Ответ 1

Вы можете попробовать следующее:

ActionView::Base.full_sanitizer.sanitize(@string)

См. strip_tags (html).

Ответ 2

Вы можете попробовать следующее:

strip_tags(@string)

Ответ 3

Вы можете использовать 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

Ответ 4

Для общего использования (например, веб-скребок):

puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello

Ответ 6

Rails предоставляет метод под названием strip_links, который, кажется, делает то, что вы хотите (глядя на его имя).

Согласно своей странице APIDock, она немного ограничена. Чтобы сделать его применимым к любой строке, вы можете расширить класс строки:

class String
  def strip_links
    ActionController::Base.helpers.strip_links(self)
  end
end

Итак, вы можете использовать:

@string.strip_links