Ich habe
@str = "<b>Hi</b>"
und aus meiner erb sicht:
<%= @str %>
Was auf der Seite angezeigt wird, ist: <b>Hi</b>
wenn was ich wirklich will ist Hallo. Wie kann man Ruby einen String als HTML-Markup "interpretieren"?
Bearbeiten: der Fall wo
@str = "<span class=\"classname\">hello</span>"
Wenn ich das aus meiner Sicht tue
<%raw @str %>
Der HTML-Quellcode ist <span class=\"classname\">hello</span
> wo was ich wirklich will ist <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 umgehen?
Aus Sicherheitsgründen wird empfohlen, sanitize
anstelle von html_safe
Zu verwenden. Link
Was passiert, ist, dass aus Sicherheitsgründen Rails für Sie an Ihrem String vorbeigeht, weil darin möglicherweise bösartiger Code eingebettet ist. Aber wenn Sie Rails Wenn Ihre Zeichenfolge html_safe
ist, wird sie direkt weitergeleitet.
@str = "<b>Hi</b>".html_safe
<%= @str %>
OR
@str = "<b>Hi</b>"
<%= @str.html_safe %>
Die Verwendung von 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 html_safe lieber direkt auf, weil dadurch ein unnötiger Schritt übersprungen und klarer wird, was los ist. Details zum String-Escaping und zum XSS-Schutz finden Sie in this Asciicast .
Verwenden Sie raw :
<%=raw @str >
Aber wie @ jmort253 richtig sagt, überlege, wo das HTML wirklich hingehört.
Sie können auch simple_format(@str)
verwenden, um bösartigen Code zu entfernen. Lesen Sie hier mehr: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Sie mischen Ihre Geschäftslogik mit Ihren Inhalten. Stattdessen würde ich empfehlen, die Daten an Ihre Seite zu senden und dann JQuery zu verwenden, um die Daten dort zu platzieren, wo Sie sie benötigen.
Dies hat den Vorteil, dass Ihr gesamter HTML-Code auf den HTML-Seiten bleibt, zu denen er gehört, sodass Ihre Webdesigner den HTML-Code später ändern können, ohne den serverseitigen Code durchlaufen zu müssen.
Wenn Sie kein JavaScript verwenden möchten, können Sie Folgendes versuchen:
@str = "Hi"
<b><%= @str ></b>
Zumindest auf diese Weise befindet sich Ihr HTML in der HTML-Seite, zu der es gehört.
Oder Sie können die Methode CGI.unescapeHTML ausprobieren.
CGI.unescapeHTML "<p>This is a Paragraph.</p>"
=> "<p>This is a Paragraph.</p>"
da Sie übersetzen und Ihren gewünschten Code aus der beschissenen codierten Datei einer Person heraussuchen, können Sie content_tag in Kombination mit Ihren regulären Ausdrücken verwenden.
Wenn Sie die API-Dokumente stehlen, können Sie diesen übersetzten Code in einen content_tag
Wie folgt interpolieren:
<%= content_tag translated_tag_type.to_sym, :class => "#{translated_class}" do -%>
<%= translated_text %>
<% end -%>
# => <div class="strong">Hello world!</div>
Wenn Sie Ihren Code nicht kennen, wird diese Art des Denkens sicherstellen, dass Ihr übersetzter Code zu konform ist.
@str = "<span class=\"classname\">hello</span>"
Wenn ich das aus meiner Sicht tue
<%raw @str %>
Der HTML-Quellcode ist<span class=\"classname\">hello</span>
wo was ich wirklich will ist<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 umgehen?
Lösung: Verwenden Sie doppelte Anführungszeichen in einfachen Anführungszeichen (oder einfache Anführungszeichen in doppelten), um zu vermeiden, dass Sie mit einem Backslash davonkommen.
@str = '<span class="classname">hello</span>'
<%raw @str %>
Die html_safe-Version funktioniert gut in Rails 4 ...
<%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
>