Rails 3: Экранирование пользовательского ввода работает по-разному в представлениях и почтовой программе

Я использую следующий набор кода как в своих представлениях, так и в почтовой программе:

<%= simple_format(auto_link(h(user_input))) %>

Я начинаю с вызова html_safe (h) для user_input, чтобы избежать опасного кода. Затем я вызываю auto_link, чтобы включить любые ссылки в их вводе, а затем я вызываю simple_format, чтобы включить разрывы строк и т. Д.

Это отлично работает на мой взгляд и правильно отображает следующее, полностью экранированное, но с работающей ссылкой:

" http://google.com "

Однако, когда то же самое отображается в электронном письме ActionMailer, я вижу, что все специальные символы, включая мою автоссылку, дважды экранированы (например, " в результате отображается неправильно. ):

&amp;quot; &lt;a href=3D&quot;http://google.com&quot;&gt;http://google.=com&lt;/a&gt; &amp;quot;

По какой-то причине мне нужно снова пометить его как html_safe, чтобы он заработал:

<%= simple_format(auto_link(h(user_input))).html_safe %>

Это правильно выводит:

&quot; <a href=3D"http://google.com">http://google.com</a> &quot;

Есть идеи, почему ActionView и ActionMailer по-разному обрабатывают один и тот же код?

5
задан William Jones 24 July 2011 в 03:18
поделиться