2011-11-08 15 views
9

Şu anda sterilize gem kullanarak şekli: Eğer "hello & world" mikroptan arindirilir kaydediyor girerseniz https://github.com/rgrove/sanitizeRaylar Gem sterilize - beyaz listeye almak ve

Sorun olduğunu DB olarak:

hello & world 

&'u nasıl beyaz listeye ekleyebilirsin? Mümkün olan tüm kötü amaçlı html ve JS/script etiketlerini temizlemeyi tercih ediyoruz. ama biz ampersana izin vermeyiz.

Fikirler? Teşekkürler.

+0

Sanitize.cl olabilir ean (html, Sanitize :: Config :: RELAXED) # => '&' –

+0

Teşekkürler ama RELAXED hemen her şeye izin verir. Ben beyaz listeye almak istiyorum ve sadece nasıl olduğunu öğrenemiyorum. – AnApprentice

+0

@ bilash.saha Rahat konfigürasyon hala html kaçış varlıkları olacak, ne yazdığınızı hala çıktı "Merhaba & dünya" – Unixmonkey

cevap

2

Sanitize, her zaman geçerli olan html/xhtml için html öğelerine çıktıları dönüştürecektir. I belirleyebilir

en iyi şekilde yerine

Sanitize.clean("hello & world").gsub('&','&') #=> "Hello & world" 
+0

Bu & karakterini çözerdi ama kullanılan html motorunun varlığa dönüştüreceği tüm çeşitli karakterlere ölçeklendirmeyin. Bir baş ağrısının olabileceğini takip etmeye çalışıyorum. @ agustin'in cevabı daha iyi bir çözüm IMO –

+0

@ShyamHabarakada Rails 'yerleşik' sanitize() 've' strip_tags' ile olan sorun, hatalı biçimlendirmeyi düzeltmemeleridir, bu yüzden eşsiz bir < "Strip Unixmonkey

+0

Doğru, yanlış biçimlendirilmiş işaretleme hakkında. Öncelikle, HTML'nin HTML içermemesi gereken parametrelere girmesini engellemenin bir yolu olarak dazenfekte ediyoruz. Strip_tags dosyasında bulunan etiketlerin sıyrılması, bizim için iyi çalışıyor. Bu soruda da senaryo gibi görünüyor. Tam bir sterilizasyon istiyorsanız, uygun bir DOM motoruna sahip daha iyi bir çözüm gerektiğine katılıyorum. Ama param sanitizasyon için IMO, bu aşırı görünüyor. –

1

yaptığımız sona erdi budur. ESCAPE_SEQUENCES biz kaçmadan istemedikleri karakter dizisi oldu

def remove_markup(html_str) 
    marked_up = Sanitize.clean html_str 

    ESCAPE_SEQUENCES.each do |esc_seq, ascii_seq| 
     marked_up = marked_up.gsub('&' + esc_seq + ';', ascii_seq.chr) 
    end 
    marked_up 
    end 

.

strip_tags("&lt;script&gt;") 
    => "<script>" 

Yalnızca işareti istiyorsanız ben filtreleme öneririm: Raylar 4.2 itibariyle

+0

Çıkış karakter kodları için http://www.escapecodes.info/ adresine bakın. – tee

0

, #strip_tags değil unencode HTML özel karakter

strip_tags("fun & co") 
    => "fun &amp; co" 

Aksi aşağıdaki alırdım yapar @Unixmonkey gibi çıktılar önerildi ve yalnızca & için saklayın.

strip_tags("<bold>Hello & World</bold>").gsub(/&amp;/, "&") 
    => "Hello & World"