Быть html_safe в Rails, сохраняя при этом html-сущности?
Допустим, я вывожу заголовок сообщения и в нашей базе данных, это Hello Y’all
- Могу ли я вывести его без использования .html_safe
, но таким образом, что он не получает вывод в HTML, как Hello Y’all
?
То есть, если пользователь копирует заголовок сообщения из текстового процессора, который использует типографски правильные апострофы, я получаю бессмысленный вывод, поскольку он выходит за пределы &
в базе данных как &
, Конечно, я хотел бы название из базы данных, которая Bonnie & Clyde
выводиться как Bonnie & Clyde
так как это правильный HTML...
Есть ли безопасный способ сделать это?
4 ответа
SafeBuffer вызывает ERB::Util.h
для строк, которые не html_safe
, так что вы можете gsub
на ERB::Util.h(your_string)
и заменить экземпляры &[code]
с &[code];
при первом сохранении строки в вашей базе данных. Таким образом, ваша строка сначала очищается
Вам нужен звонок ERB::Util.h(your_string).gsub(/&(#x?[\da-fA-F]+;)/, '&\1')
Затем всякий раз, когда вам нужно отобразить эту конкретную строку, вызовите html_safe
в теме.
Используйте ActionView::Helpers::SanitizeHelper
<%= "Hello Y’all" %>
<%= sanitize "Hello Y’all" %>
будет производить:
Hello Y’all
Hello Y’all
Есть 3 способа сделать это:
1: "string".htmlsafe
2: <%= raw "string" %>
3. <%== "string" %>
Я думаю, что вы должны использовать <% = raw "string"%> в качестве аргумента, применить к нему.to_s, а затем просто применить к нему html_safe. Следовательно, было бы безопасно использовать второй вариант.
<%= raw "Y&#8217;all" %>
или же <%== "Y&#8217;all" %>
две возможности.