Ruby Sanitize Code ... почему и продезинфицировано - PullRequest
3 голосов
/ 22 октября 2009

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

ERB::Util::h(string)

Моя проблема возникает, когда строка уже обработана следующим образом:

string = "Watching baseball `&` football"

Обработанострока будет выглядеть следующим образом:

sanitized_string = "Watching baseball `&` football"

Можно ли выполнить санитарную обработку, просто превратив <в <code>&lt; и> в &gt; путем подстановки?

Ответы [ 4 ]

3 голосов
/ 22 октября 2009

Сначала удалите, затем снова сбегите:

require 'cgi'
string = "Watching baseball &amp; football"

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball &amp; football"
0 голосов
/ 22 октября 2009

Вы можете написать свое собственное дезинфицирующее средство, но есть много угловых случаев и хитрых краев в дезинфекции.

Лучшим подходом может быть дешифрование вашей строки перед ее очисткой - есть ли у h () обратное значение, через которое вы могли бы сначала провести свои строки?

0 голосов
/ 22 октября 2009

Да, вы можете, или, если продолжить, вы можете просто удалить целые теги с помощью регулярного выражения, например:

mystring.gsub( /<(.|\n)*?>/, '' )
0 голосов
/ 22 октября 2009

Быстрый подход, основанный на этом фрагменте от Erubis .

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' }
def custom_h(value)
   value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
...