Ruby Sanitize-Code ... warum ist & hygienisiert
Frage
Ich verwende derzeit den folgenden Code eine Zeichenfolge zu sanieren, bevor sie zu speichern:
ERB::Util::h(string)
Mein Problem tritt auf, wenn die Zeichenfolge bereits saniert worden ist, wie folgt aus:
string = "Watching baseball `&` football"
Das hygienisiert String wird wie folgt aussehen:
sanitized_string = "Watching baseball `&` football"
Kann ich sanieren, indem Sie gerade drehen >
über Substitution?
Lösung
Unescape zuerst, dann wieder entweichen:
require 'cgi'
string = "Watching baseball & football"
CGI.escapeHTML(CGI.unescapeHTML(string))
=> "Watching baseball & football"
Andere Tipps
Ein schneller Ansatz basierte auf diesen Ausschnitt aus erubis .
ESCAPE_TABLE = { '<'=>'<', '>'=>'>' }
def custom_h(value)
value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
Ja, Sie können, oder nehmen es weiter können Sie nur mit einer grundlegenden regex wie diese ganzen Tags löschen:
mystring.gsub( /<(.|\n)*?>/, '' )
Sie können Ihre eigenen Sanitizer schreiben, aber es gibt viele Eckfällen und knifflige Kanten in sanitization.
Ein besserer Ansatz könnte sein, Ihren String unencode bevor es Hygienisierung - nicht h () einen invers Sie Ihre Saiten durch die erste Stelle setzen könnten
?