ich habe
@str = "<b>Hi</b>"
und aus meiner erb sicht:
<%= @str %>
Was auf der Seite angezeigt wird, ist: <b>Hi</b>
Wenn ich wirklich Hallo will . Was ist der rubinrote Weg, um einen String als HTML-Markup zu "interpretieren"?
Bearbeiten : der Fall wo
@str = "<span class=\"classname\">hello</span>"
Wenn ich es aus meiner Sicht tue
<%raw @str %>
Der HTML-Quellcode ist <span class=\"classname\">hello</span
> wo ich wirklich will <span class="classname">hello</span>
(ohne die Backslashes, die den doppelten Anführungszeichen entgangen sind). Was ist der beste Weg, um diese doppelten Anführungszeichen zu "entkommen"?
%Q["quotation marks"] => "\"quotation marks\""
Quelle: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… Weiß nicht, ob das hilft.Antworten:
AKTUALISIEREN
Aus Sicherheitsgründen wird empfohlen,
sanitize
anstelle von zu verwendenhtml_safe
. VerknüpfungWas passiert, ist, dass Rails aus Sicherheitsgründen Ihrer Zeichenfolge entgeht, da möglicherweise schädlicher Code darin eingebettet ist. Wenn Sie Rails jedoch mitteilen, dass es sich um eine Zeichenfolge handelt
html_safe
, wird diese direkt durchlaufen.ODER
Die Verwendung
raw
funktioniert einwandfrei, aber alles, was es tut, ist, die Zeichenfolge in eine Zeichenfolge zu konvertieren und dann html_safe aufzurufen. Wenn ich weiß, dass ich eine Zeichenfolge habe, rufe ich lieber html_safe direkt auf, da dadurch ein unnötiger Schritt übersprungen wird und klarer wird, was los ist. Details zum Escape-Escape und zum XSS-Schutz finden Sie in diesem Asciicast .quelle
raw
. Sehr froh darüber zu wissen!Verwenden Sie roh :
Aber wie @ jmort253 richtig sagt, überlegen Sie, wo der HTML-Code wirklich hingehört.
quelle
Wenn Sie auf sind
rails
die nutzt erubis - die coolste Art , es zu tun ist ,Beachten Sie das doppelte Gleichheitszeichen. Weitere Informationen finden Sie in der entsprechenden Frage zu SO.
quelle
Sie können auch verwenden
simple_format(@str)
, um schädlichen Code zu entfernen. Lesen Sie hier mehr: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatquelle
Sie mischen Ihre Geschäftslogik mit Ihren Inhalten. Stattdessen würde ich empfehlen, die Daten an Ihre Seite zu senden und dann etwas wie JQuery zu verwenden, um die Daten dort zu platzieren, wo Sie sie benötigen.
Dies hat den Vorteil, dass Ihr gesamtes HTML auf den HTML-Seiten verbleibt, zu denen es gehört, sodass Ihre Webdesigner das HTML später ändern können, ohne den serverseitigen Code durchgehen zu müssen.
Wenn Sie kein JavaScript verwenden möchten, können Sie Folgendes versuchen:
Zumindest auf diese Weise befindet sich Ihr HTML auf der HTML-Seite, zu der es gehört.
quelle
Oder Sie können die CGI.unescapeHTML- Methode ausprobieren .
quelle
Da Sie übersetzen und Ihren gewünschten Code aus der beschissenen codierten Datei einer Person auswählen, können Sie content_tag in Kombination mit Ihren regulären Ausdrücken verwenden.
Wenn Sie aus den API-Dokumenten stehlen, können Sie diesen übersetzten Code
content_tag
wie folgt interpolieren :Wenn Sie Ihren Code nicht kennen, wird durch diese Art des Denkens sichergestellt, dass Ihr übersetzter Code zu konform ist.
quelle
Lösung: Verwenden Sie doppelte Anführungszeichen in einfachen Anführungszeichen (oder einfache Anführungszeichen in doppelten Anführungszeichen), um zu vermeiden, dass ein Backslash auftritt.
quelle
Die html_safe-Version funktioniert gut in Rails 4 ...
quelle