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 < und> in > über Substitution?

War es hilfreich?

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 = { '<'=>'&lt;', '>'=>'&gt;' }
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

?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top