2012-06-03 10 views
5

Il mio obiettivo è quello di trovare qualcosa di simile a 'b1234' in un paragrafo e sostituirlo con:modo corretto per farlo trovare un modello e sostituirlo con un collegamento in una vista Rails

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

Ho fatto questo utilizzando rubino pianura :

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

Produce:

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

ho il seguente nei miei rotaie vista:

<%= post.content %> 

Nota: non memorizzo il codice di collegamento HTML nel mio DB quando vengono creati i post.

Se lo faccio:

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

vengo sfuggito HTML nel file di output:

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

... E voglio che il comportamento, non voglio utenti la pubblicazione HTML (gli iframe sarebbero spaventosi!).

Ma, come posso ancora ottenere la funzionalità di ricerca e sostituzione che desidero senza sacrificare la sicurezza? Forse un approccio Javascript?

Grazie!

risposta

4

doppio il uguale segni. <%== post.content.gsub(...) %>. Se gli utenti sono anche potenzialmente scrivendo HTML in questo contenuto, allora avrete bisogno di Sanitize, in modo che siano consentiti solo i tag HTML specificati, per esempio.

MODIFICA | In realtà, a condizione che la stringa di ricerca si sta sostituendo non contiene HTML caratteri speciali, si può solo fuggire la stringa, quindi fare il gsub:

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

L'ultima riga di codice è pura perfezione! Grazie. – cnandreu

+0

Probabilmente si dovrebbe estrarre il codice in una funzione di supporto per rendere più facile per testare, il riutilizzo e capire. –

Problemi correlati