2012-06-03 7 views
5

Mein Ziel ersetzen ist so etwas wie ‚b1234‘ in einem Absatz zu finden und ersetzen Sie es mit:korrekte Art und Weise ein Muster finden zu tun und mit einem Link in einer Rails-Ansicht

<a href=http://bugtracker.com/bug/1234>b1234</a> 

Ich habe diese mit Klar ruby :

"I fixed b1234 today".gsub(/(b([0-9]+))/i, '<a href=http://bugtracker.com/bug/\2>\1</a>') 

Es gibt:

=> "I fixed <a href=http://bugtracker.com/bug/1234>b1234</a> today" 

ich folgend in meinen Schienen habe anzuzeigen:

<%= post.content %> 

Hinweis: Ich speicher den HTML-Link-Code nicht in meiner DB, wenn Beiträge erstellt werden.

Wenn ich tun:

<%= post.content.gsub(...) %> 

I html in der Ausgabedatei entkommen lassen:

&lt;a href= ... instead of <a href= ... 

... Und Ich möchte dieses Verhalten, ich will nicht den Benutzern HTML-Posting (iframes wären beängstigend!).

Aber, wie kann ich immer noch die Funktionalität finden und ersetzen, die ich will, ohne die Sicherheit zu opfern? Vielleicht ein Javascript-Ansatz?

Danke!

Antwort

4

Verdoppeln Sie die Gleichheitszeichen. <%== post.content.gsub(...) %>. Wenn Benutzer möglicherweise auch HTML in diesen Inhalt schreiben, müssen Sie dies unter Sanitize tun, damit beispielsweise nur bestimmte HTML-Tags zulässig sind.

BEARBEITEN | Eigentlich, sofern die Suchzeichenfolge Sie ersetzen enthalten keine HTML-Sonderzeichen, können Sie einfach die Zeichenfolge entkommen, dann tun die gsub:

<%== h(post.content).gsub(...) %> 
+0

Die letzte Zeile des Codes ist pure Perfektion! Vielen Dank. – cnandreu

+0

Sie sollten diesen Code wahrscheinlich in eine Hilfsfunktion extrahieren, um das Testen, Wiederverwenden und Verstehen zu erleichtern. –