Ruby on Rails: Wie rende ich einen String als HTML?
Habe ich
@str = "<b>Hi</b>"
und in meinem erb anzeigen:
<%= @str %>
Was wird auf der Seite angezeigt wird: <b>Hi</b>
wenn das, was ich wirklich will, ist Hallo. Was ist der ruby-Art zu "interpretieren" einen string als HTML-markup?
Bearbeiten: der Fall, wo
@str = "<span class=\"classname\">hello</span>"
Wenn in meiner Ansicht, die ich tun
<%raw @str %>
HTML-Quellcode ist <span class=\"classname\">hello</span
> wo das, was ich wirklich will, ist <span class="classname">hello</span>
(ohne die Schrägstriche, die entkommen waren die Anführungszeichen) ein. Was ist der beste Weg, um "unescape" double quotes?
InformationsquelleAutor der Frage Tim | 2011-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE
Für die Sicherheit Grund, es wird empfohlen,
desinfizieren
statthtml_safe
. LinkWas passiert, ist, dass, als eine Sicherheitsmaßnahme, Schienen entkommen ist dein string, für Sie, weil es möglicherweise bösartigen code in Sie eingebettet sind. Aber wenn Sie sagen Schienen, dass Ihr string ist
html_safe
werde es es passieren rechts durch.ODER
Mit
raw
funktioniert gut, ist aber alle es tut, ist die Umwandlung der Zeichenfolge in eine Zeichenfolge, und dann ruft html_safe. Wenn ich weiß, ich habe einen string, ziehe ich den Aufruf html_safe direkt, denn es springt einen unnötigen Schritt und macht es klarer, was Los ist. Details zu string-escaping-und XSS-Schutz sind in diese Asciicast.InformationsquelleAutor der Antwort Jacob
Verwenden raw:
Aber wie @jmort253 richtig sagt, überlegen, wo die HTML wirklich gehört.
InformationsquelleAutor der Antwort Michael Stum
Wenn Sie auf
rails
was nutzt Erubis — der coolste Weg, es zu tun istBeachten Sie das doppelte Gleichheitszeichen. Sehen Frage im Zusammenhang mit auf SO für mehr info.
InformationsquelleAutor der Antwort jibiel
Können Sie auch
simple_format(@str)
entfernt bösartigen code. Lesen Sie hier mehr: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatInformationsquelleAutor der Antwort bcackerman
Mischen Sie Ihre business-Logik mit Ihren Inhalten. Stattdessen würde ich empfehlen, das senden der Daten zu Ihrer Seite und dann mit so etwas wie JQuery, um die Daten, wo Sie es brauchen zu gehen.
Dies hat den Vorteil, dass alle Ihre HTML-Code in die HTML-Seiten, wo es hingehört, so dass Ihre web-Designer können Sie ändern die HTML-später ohne zu Gießen durch server-side-code.
Oder wenn Sie nicht wollen, um die JavaScript verwenden, Sie könnten versuchen, diese:
Zumindest auf diese Weise Ihre HTML wird in die HTML-Seite ist, wo es hingehört.
InformationsquelleAutor der Antwort jmort253
Oder Sie können versuchen, CGI.unescapeHTML Methode.
InformationsquelleAutor der Antwort Arman Ortega
da Sie übersetzen, und Kommissionierung Ihr wollte, dass code von einer person beschissen codierten Datei, könnte Sie verwenden content_tag, in combo mit deinem regex.
Stehlen aus den api-docs, könnte man interpolieren diese übersetzt den code in eine
content_tag
wie:Nicht zu wissen, Ihren code, diese Art des Denkens wird, stellen Sie sicher, dass Ihre übersetzten code ist auch konform.
InformationsquelleAutor der Antwort pjammer
Lösung: verwenden Sie doppelte Anführungszeichen innerhalb von einfachen Anführungszeichen (single oder innerhalb von doppelten) zu vermeiden, entkommen mit einem backslash.
InformationsquelleAutor der Antwort Crash
Den html_safe version funktioniert gut in den Schienen 4...
InformationsquelleAutor der Antwort G. A.