Ruby on Rails 문자열에서 html 제거 equal 메서드를 사용하여 문자열에서 제거 하고

Ruby on Rails로 작업하고 있습니다. htmlsanitize 또는 equal 메서드를 사용하여 문자열에서 제거 하고 입력 태그의 value 속성 안에 텍스트 만 유지하는 방법이 있습니까?



답변

strip_tags방법이 있습니다 ActionView::Helpers::SanitizeHelper.

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

편집 : 값 속성 내부의 텍스트를 얻으려면 Xpath 표현식과 함께 Nokogiri와 같은 것을 사용하여 문자열에서 가져올 수 있습니다.


답변

이것을 모델에서 사용하려면

ActionView::Base.full_sanitizer.sanitize(html_string)

“strip_tags”메소드의 코드입니다.


답변

네, 전화하세요 : sanitize(html_string, tags:[])


답변

ActionView::Base.full_sanitizer.sanitize(html_string)

태그 및 속성의 화이트리스트는 다음과 같이 지정할 수 있습니다.

ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))

위의 문은 img , brp 태그 와 srcstyle 속성을 허용합니다 .


답변

HTML과 XML (문서와 문자열 조각 모두)에 적합하기 때문에 Loofah 라이브러리를 사용했습니다. 그것은 html sanitizer gem의 엔진입니다. 사용이 얼마나 간단한 지 보여주기 위해 코드 예제를 붙여 넣는 것입니다.

수세미 보석

unsafe_html = "ohai! <div>div is safe</div> <script>but script is not</script>"

doc = Loofah.fragment(unsafe_html).scrub!(:strip)
doc.to_s    # => "ohai! <div>div is safe</div> "
doc.text    # => "ohai! div is safe "


답변

이건 어때요?

white_list_sanitizer = Rails::Html::WhiteListSanitizer.new
WHITELIST = ['p','b','h1','h2','h3','h4','h5','h6','li','ul','ol','small','i','u']


[Your, Models, Here].each do |klass|
  klass.all.each do |ob|
    klass.attribute_names.each do |attrs|
      if ob.send(attrs).is_a? String
        ob.send("#{attrs}=", white_list_sanitizer.sanitize(ob.send(attrs), tags: WHITELIST, attributes: %w(id style)).gsub(/<p>\s*<\/p>\r\n/im, ''))
        ob.save
      end
    end
  end
end


답변