2012-05-20 9 views
11

ich geerbt haben, die folgende Zeichenfolge (ich kann nichts über das Format tun):URL-Kodierung HTML-String

<iframe \n class=\"some_class\"\n type=\"text/html\" \n src=\"/embed/iframe_content.html?id=tsqA5D7_z10\" \n width=\"960\" \n height=\"593\" \n marginwidth=\"0\" \n marginheight=\"0\" \n frameborder=\"0\">\n</iframe> 

ich es in einer erb Vorlage wie folgt bin Rendering:

<%= the_string %> 

Bei der Moment es rendert als Text wie folgt:

&lt;iframe class="some_class" type="text/html" src="/embed/iframe_content.html?id=tsqA5D7_z10" width="960" height="593" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt; 

Ich muss es als HTML rendern.

Ich habe versucht, die folgenden:

  1. <%= the_string.html_safe %> # Renders die Zeichenfolge unverändert
  2. <%= CGI.unescapeHTML(the_string) %> # Fehler mit einem Typ-Fehler 'dup nicht NilClass'
  3. <%= CGI.unescapeHTML(the_string).html_safe %> # Fehler mit einem Typ-Fehler " dup nicht NilClass'
  4. <%= raw the_string %> # Renders die Zeichenfolge unverändert

Wie kann ich diese Zeichenfolge als HTML rendern?

Antwort

17

Wie Sie zu haben scheinen bemerkt haben, gibt es zwei Dinge, die Sie sich kümmern müssen:

  1. die HTML-Entitäten URL-Kodierung
  2. den rohen HTML Ihrer Ansicht nach Drucken

Für die Nummer 2 <%= raw ... %> sollte gut funktionieren.

Für die Nummer 1 CGI.unescapeHTML war die richtige Idee, aber ich glaube nicht, dass alle Entitäten HTML erkennt so würde ich an den

HTML Entites gem einen Blick empfehlen können Sie auch die simple_format Helper-Methode versuchen und verwenden, aber Ich denke, Sie müssen es einige Optionen übergeben, damit die Tag

auch ich würde dringend vorschlagen, Ihre unescaping Logik in eine Hilfsmethode zu bewegen.

+0

Vielen Dank für diese Vorschläge. Ich werde mal schauen. – Undistraction

+0

Danke nochmal. Der HTML-Entites-Edelstein war die Antwort. – Undistraction

1

Sie können dies versuchen:

<%= raw the_string %> 
+0

Danke für den Vorschlag, hat aber keine Auswirkung auf die Zeichenfolge. – Undistraction

1

Version 3 klingt wertvoll. Gibt es einen Grund, warum Sie den_string nicht verwenden?

<%= raw CGI.unescapeHTML(the_string) %>

+0

Wie ich in meiner Frage erwähne es scheitert mit dem Fehler Typ Fehler 'kann nicht NilClass' – Undistraction

+0

In Ihrer Frage war es anders. Immer noch der gleiche Fehler? – iltempo

+0

Entschuldigung. Du hast recht. Aber nein. Gleiches Ergebnis: Type Error 'kann NilClass nicht dupieren' – Undistraction

4

Am Ende musste ich die HTMLEntities Gem von Matthew vorgeschlagen verwenden;

  1. den Edelstein mit RVM installiert und es zu meiner Gemfile

  2. in meiner Anwendung notwendig es.rb

  3. Das Folgende war der einzige Weg, wie ich es richtig rendern konnte. Beachten Sie die zusätzlichen einfachen Anführungszeichen, die um den_string gewickelt sind. Ohne sie rendern die spitzen Klammern nicht, obwohl alles andere tut.

    coder = HTMLEntities.new 
    raw coder.decode("'"+the_string+"'") 
    
7

, was Sie URL-Kodierung darf nicht einen String und das ist, warum Sie Fehler mit einem Typ Fehler can't dup NilClass

werden immer versuchen
s = String.new your_obj.to_s

Jetzt tun tun

CGI.unescapeHTML(s)

+0

Arbeiten in einer Steuerung? Dies ist die richtige Antwort, aber Sie müssen ändern to_s -> to_str. – jqr

Verwandte Themen