Удаление HTML-разметки из строки перевода
У меня есть несколько переводов, которые я использую в своих взглядах. Эти переводы иногда возвращают очень простую HTML-разметку в них -
t("some.translation")
#=> "This is a translation <a href="/users">with some</a> markup<br />"
(Примечание: я использую этот фантастический камень, чтобы легко вставлять разметку и, в частности, ссылки, в мои переводы)
Что если в некоторых случаях я хотел бы удалить теги HTML, например, когда я работаю со строкой перевода в моих тестах RSpec. Есть ли функция HTML strp, которая будет компилировать и удалять эту разметку?
t("some.translation").some_html_strip_method
#=> "This is a translation with some markup"
Спасибо!
2 ответа
Вы можете попробовать strip_tags из ActionView::Helpers::SanitizeHelper
strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...")
# => Bold no more! See more here...
strip_tags("<div id='top-bar'>Welcome to my website!</div>")
# => Welcome to my website!
В зависимости от того, где вы его используете.
Метод strip_tags не работает в контроллерах, моделях или библиотеках
Появляется ошибка о том, что white_list_sanitizer не определен в классе, в котором вы его используете.
Чтобы обойти это, используйте:
ActionController::Base.helpers.strip_tags('string')
Чтобы сократить это, добавьте что-то вроде этого в инициализатор:
class String
def strip_tags
ActionController::Base.helpers.strip_tags(self)
end
end
Затем позвоните с помощью:
'string'.strip_tags
Но если вам нужно использовать его только в VIEW, просто:
<%= strip_tags(t("some.translation")) %>