Еще раз, html_safe
- это не тот метод, который вам следует использовать; это не делает то, что вы думаете, что делает. Все, что html_safe
делает, - помечает строку как безопасную, что говорит Rails, что ей не нужно экранировать ее в представлении. При использовании креветок это не будет иметь никакого эффекта.
Звучит так, будто вы хотите сделать это не escape HTML, а strip HTML-теги из строки. В Rails есть HTML-дезинфицирующее средство в ActionView::Helpers::SanitizeHelper
, но по умолчанию он допускает определенные теги; Вы можете отключить это поведение, используя атрибут tags
.
class MyClass
include ActionView::Helpers::SanitizeHelper
def remove_html(string)
sanitize(string, :tags => {}) # empty tags hash tells it to allow no tags
end
end
obj = MyClass.new
obj.remove_html "<b>sample text</b> &nspb; <p>sample text</p>"
=> "sample text &nspb; sample text"
Вы можете include ActionView::Helpers::SanitizeHelper
в вашем контроллере, чтобы получить доступ к методу sanitize
.
Обратите внимание, что
все еще находится в строке; если вы хотите удалить эти HTML-сущности, вам нужно использовать другой метод; HTMLEntities gem является одним из таких методов:
[1] pry(main)> require 'htmlentities'
=> true
[2] pry(main)> coder = HTMLEntities.new
=> #<HTMLEntities:0x007fb1c126a910 @flavor="xhtml1">
[3] pry(main)> string = "sample text sample text"
=> "sample text sample text"
[4] pry(main)> coder.decode string
=> "sample text sample text"
(обратите внимание, что в вашем примере текст говорит &nspb;
вместо
).