Быть 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&#8217;all" %>
<%= sanitize "Hello Y&#8217;all" %>

будет производить:

Hello Y&#8217;all
Hello Y’all

Есть 3 способа сделать это:

1: "string".htmlsafe
2: <%= raw "string" %>
3. <%== "string" %>

Я думаю, что вы должны использовать <% = raw "string"%> в качестве аргумента, применить к нему.to_s, а затем просто применить к нему html_safe. Следовательно, было бы безопасно использовать второй вариант.

<%= raw "Y&amp;#8217;all" %> или же <%== "Y&amp;#8217;all" %> две возможности.

Другие вопросы по тегам