2016-10-19 8 views
0

У меня есть поле text_area в форме, которая позволяет форматировать текст через очень простой WYSIWYG (полужирный/подчеркивающий/маркерные точки). Это было нацелено на согласованное форматирование в профиле описания пользователей.Разрешить копировать/вставлять в поле формы text_area, но удалять форматирование

<%= l.text_area :access, value: "#{t('.access_placeholder_html')}" %> 

Тем не менее, некоторые пользователи обычно заполняют текстовую область путем копирования/вставки непосредственно со своего веб-сайта. И их конкретные форматирование «гипертекстовые ссылки», размер шрифта и т. Д. После отражения на моем сайте, что делает его немного грязным.

Как я могу решить эту проблему. В идеале мне бы очень хотелось, чтобы при сохранении формы он избавлялся от всего HTML-кода, который не разрешен, а не позволяет копировать/вставлять. Это возможно? Интересно, следует ли использовать Sanitize, но если да, то как? (Извините за новый код, я думаю, вы бы поняли).

ответ

0

Вы не сказали, какая версия Rails, но вы можете использовать #sanitize от ActionView::Helpers::SanitizeHelper, чтобы удалить все форматирование HTML. Он сглаживает HTML из текста с помощью скруббера. По умолчанию скруббер позволяет добавлять атрибуты в белый список. Вы даже можете создать свой собственный скруббер, чтобы изменить строку, если вам нужно больше контролировать то, что выводится. Модуль также содержит #strip_tags и #strip_links, которые являются очень простыми скрубберами, которые удаляют все теги HTML и все теги ссылок HTML (оставляя текст ссылки).

Обратите внимание, что вы можете завершить неверный текст, если вход пользователя недействителен HTML.

Быстрые примеры из документации:

// remove all HTML tags except <strong> <em> <a> and the 
// <href> attributes from @text 
nomarkup_text = sanitize @text, tags: %w(strong em a), attributes: %w(href) 

// remove all HTML markup 
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...") 

возвращает строку Bold no more! See more here...

// remove just the link markup 
strip_links('Please e-mail me at <a href="mailto:[email protected]">[email protected]</a>.') 

возвращает строку Please e-mail me at [email protected]

Более подробно на дополнительной API page for SantizeHelper

+0

Одна вещь, вы можете хранить разметку HTML в базах данных e и дезинфекция в представлении перед отображением. Таким образом, в будущем вы можете сделать что-то еще с текстом HTML, если вы выберете. Если вы отбросили форматирование перед сохранением, оно исчезнет. – Fred

+0

Спасибо за быстрый ответ и ссылку. Я использую Ruby 2.2.1. Я должен был сказать вам, что я уже прошел через санитарию перед публикацией. Поэтому, если я выберу вариант 2 (избавьтесь от форматирования перед сохранением), как мне его написать? Как я могу объединить поле формы и дезинфицировать вместе? – user6877257

+0

Простейшим способом было бы дезинформировать строку в модели при назначении текстового поля атрибуту модели перед сохранением в базе данных. Вы не можете обработать form_field на лету без какой-либо тщательной мысли (например, что бы вы сделали, если недоделанный текст не был хорошо сформированным HTML). Вы можете запустить некоторый javascript, когда текстовое поле теряет фокус и вычеркнет HTML, но если вы вернете результат в текстовое поле, это может смутить пользователя. Вам необходимо точно определить, что вы хотите сделать, прежде чем выбирать метод реализации. – Fred