Рейл 3, спасаясь от Маруку - PullRequest
2 голосов
/ 27 мая 2010

Я использую Maruku с моим приложением RoR3. Но проблема в том, что когда я использую метод h(text) для экранирования текста из базы данных перед использованием Maruku, он экранируется от > до >, поэтому Maruku не увидит это как цитату.

Но я все еще хочу избежать остальной части текста, поэтому мой вопрос, как я могу заставить эту работу?

Я не хочу отключать экранирование, но не хочу, чтобы он сбегал >

Ответы [ 2 ]

3 голосов
/ 07 июня 2010

Rails 3 экранирует все строки по умолчанию . Вам нужно пометить их как безопасные, используя "some_string.html_safe" или использовать <% = raw some_string%> в шаблоне, если вы хотите избежать этого.

Если вы настроите sanitize helper , чтобы разрешить HTML-теги, через которые вы хотите пройти, вы можете сделать что-то вроде этого:

<%= sanitize(@maruku_content.to_html) %>

Sanitize очистит ваш контент и пометит вывод как html_safe, оставив нужные теги без изменений. Эта опция обсуждается в документации плагина rails_xss здесь . Пример, который они используют для текстиля.

0 голосов
/ 06 июня 2010

Следующий метод принимает многострочные строки html_encoded и заменяет все элементы блочной цитаты maruku, которые были преобразованы в коды сущностей html, обратно в>

Для этой реализации строка цитаты maruku определяется как строка, начинающаяся с одной или нескольких> последовательностей, разделенных необязательным пробелом.

def maruku_escape(text)
  text.gsub(/^([\s]*\&gt;)+/) {|match| match.gsub(/\&gt;/, '>')}
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 =  "&lt;b&gt;A bold tag&lt;/b&gt;
&lt;span&gt;Some text in a span&lt;/span&gt;

Some Markdown
> Blockquote 1
  > > nested blockquote 1
  > > nested blockquote 2
  >> nested blockquote 3 with no spaces


Some plain text with an invalid blockquote &gt; Some blockquote text
&lt;i&gt;The end in italics&lt;i&gt;
"
...