2014-11-05 66 views

回答

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>" 

sanitizestrip_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沒有。

[70] pry(main)> sanitize "< &" 
=> "&lt; &" 
[71] pry(main)> 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')"