Вопрос
Я использую Maruku с моим приложением ROR3. Но проблема в том, что когда я использую h(text)
Способ избежать текста из базы данных, прежде чем использовать Maruku, он убегает >
к >
Так что Маруку не увидит это как блокировку.
Но я все еще хочу избежать остальной части текста, поэтому мой вопрос в том, как я могу сделать эту работу?
Я не хочу отключить убежище, но я не хочу, чтобы это сбежать >
Решение
Следующий метод принимает HTML_ENCODED MULTILINE STRINGS и заменяет все элементы блокировки Maruku, которые были преобразованы в коды сущностей HTML обратно в>
В целях этой реализации линия блокировки Maruku определяется как строка, начиная с одной или нескольких> последовательностей, разделенных дополнительным пробелом.
def maruku_escape(text)
text.gsub(/^([\s]*\>)+/) {|match| match.gsub(/\>/, '>')}
end
Использовалась следующая тестовая строка
test_text = "<b>A bold tag</b>
<span>Some text in a span</span>
Some Markdown
> Blockquote 1
> > nested blockquote 1
> > nested blockquote 2
>> nested blockquote 3 with no spaces
Some plain text with an invalid blockquote > Some blockquote text
<i>The end in italics<i>"
И используя это следующим образом maruku_text = maruku_escape(ERB::Util.html_escape(test_text))
Дал следующие результаты
result = "<b>A bold tag</b>
<span>Some text in a span</span>
Some Markdown
> Blockquote 1
> > nested blockquote 1
> > nested blockquote 2
>> nested blockquote 3 with no spaces
Some plain text with an invalid blockquote > Some blockquote text
<i>The end in italics<i>
"
Другие советы
Rails 3 выходит из всех строк по умолчанию. Отказ Вам нужно отметить их как безопасную, используя «que_string.html_safe» или использовать <% = RAW WEMPLE_STRING%> в шаблоне, если вы хотите избежать этого.
Если вы настроиете дезинфицировать хелпер Чтобы допустить теги HTML, которые вы хотите пройти, вы можете сделать что-то подобное:
<%= sanitize(@maruku_content.to_html) %>
Sanitize будет выкрашивать ваш контент и отметьте вывод как HTML_SAFE, оставив желаемые теги Intact. Эта опция обсуждается в документах плагинов Rails_XSS здесь. Отказ Пример, который они используют для текстиля.