2014-11-05 2 views

ответ

2

С помощью sanitize вы можете разрешить некоторые HTML-теги или класс, strip_tags не может. Он делает то же самое. Проверьте код https://github.com/rails/rails/blob/76a0b1028e312b6c3c00a50b4a09d68c23b5e713/actionview/lib/action_view/helpers/sanitize_helper.rb#L80

+0

Это значит, что strip_tags удалит все, что угодно? И в «дезинфекции», имеющей право ограничивать. –

+1

Да, у вас есть дополнительная информация о http://api.rubyonrails.org/. –

3

sanitize использует дезинфицирующее средство белого списка. strip_tags полоски всех тегов.

Сравнить:

[64] pry(main)> sanitize "hello <h1>h1</h1> <b>b</b>" 
=> "hello <h1>h1</h1> <b>b</b>" 
[65] pry(main)> strip_tags "hello <h1>h1</h1> <b>b</b>" 
=> "hello h1 b" 

Если вы не предоставляете никаких меток из белого списка, sanitize позволяет следующие теги по умолчанию.

[66] pry(main)> ActionView::Base.white_list_sanitizer.allowed_tags.to_a * ', ' 
=> "strong, em, b, i, p, code, pre, tt, samp, kbd, var, sub, sup, 
dfn, cite, big, small, address, hr, br, div, span, h1, h2, h3, 
h4, h5, h6, ul, ol, li, dl, dt, dd, abbr, acronym, a, img, 
blockquote, del, ins" 

Если вы поставили свои собственные белые теги, они переопределяют значения по умолчанию.

[67] pry(main)> sanitize "hello <h1>h1</h1> <b>b</b>", tags: %w(b) 
=> "hello h1 <b>b</b>" 

Другое различие между sanitize и strip_tags является то, что sanitize удаляет содержимое (материал между) некоторых тегов, в частности с <script> тега.

Сравнить:

[68] pry(main)> sanitize "a<script>alet('foo')</script>" 
=> "a" 
[69] pry(main)> strip_tags "a<script>alet('foo')</script>" 
=> "aalet('foo')" 

Кроме того, sanitize делает HTML-побег для некоторых персонажей, но strip_tags не делает.

Кроме того, они обрабатывают вложенные теги по-разному. Сравните следующее,

[73] pry(main)> sanitize "some<<b>script>alert('hello')<</b>/script>", tags: [] 
=> "some&lt;script>alert('hello')&lt;/script>" 
[74] pry(main)> strip_tags "some<<b>script>alert('hello')<</b>/script>" 
=> "somealert('hello')" 
Смежные вопросы