У меня есть ненадежная строка, которую я хочу показать как текст на HTML-странице. Мне нужно убежать от символов ' <
' и ''&
' как объектов HTML. Чем меньше суеты, тем лучше.
Я использую UTF8, и мне не нужны другие сущности для букв с диакритическими знаками.
Есть ли встроенная функция в Ruby или Rails, или я должен использовать свою?
&<>"'/
Ответы:
h
Вспомогательный метод:источник
h
есть псевдоним дляhtml_escape
Ознакомьтесь с классом Ruby CGI . Существуют методы кодирования и декодирования HTML, а также URL-адресов.
источник
В Ruby on Rails 3 HTML по умолчанию будет экранирован.
Для строк без экранирования используйте:
источник
ERB :: Util.html_escape можно использовать где угодно. Он доступен без использования
require
в Rails.источник
CGI.escapeHTML
внизуВ дополнение к ответу Кристофера Брэдфорда использовать экранирование HTML где угодно, поскольку большинство людей в настоящее время не используют
CGI
, вы также можете использоватьRack
:источник
Вы можете использовать либо
h()
илиhtml_escape()
, но большинство людей используютh()
условно.h()
это сокращение отhtml_escape()
рельсы.В вашем контроллере:
На ваш взгляд:
Если вы просматриваете исходный HTML-код: вы увидите результат без выделения данных. Т.е. кодируется как
<b>Hello World!</b>
.Он будет отображаться как
<b>Hello World!</b>
источник
Сравнение различных методов:
Я написал свой собственный, чтобы быть совместимым с экранированием Rails ActiveMailer:
источник
h()
также полезно для экранирования кавычек.Например, у меня есть представление, которое генерирует ссылку с использованием текстового поля
result[r].thtitle
. Текст может включать одинарные кавычки. Если бы я не сбежалresult[r].thtitle
с помощью метода подтверждения, Javascript сломался бы:Примечание:
:html
объявление заголовка волшебным образом экранируется Rails.источник