2010-11-23 12 views
5

Tengo un campo de texto donde los usuarios pueden ingresar contenido. Cuando se trata de mostrar su entrada en una página, los rieles devuelven \n por cada salto de línea, que aparece como ningún descanso en absoluto para html en la página.Analizando caracteres de nueva línea en textareas sin permitir todas las etiquetas html

Por lo que sé, la forma habitual de conseguir alrededor de esto es un comando .gsub, en sustitución de \n con <br />, y luego un .html_safe en el extremo para asegurar la <br /> renders.

El problema es que no quiero html_safe el contenido - html aún debe reemplazarse, pero las etiquetas <br /> se deben insertar en el contenido (no escapado).

Sugerencias apreciados.

Respuesta

16

El método simple_format es bueno para los saltos de línea de formato. Encapsula bloques de texto en etiquetas <p> y convierte caracteres de nueva línea en saltos de línea (<br>) (líneas dobles nuevas divide el siguiente texto en un segundo párrafo).

Sin embargo, no escapan otros caracteres HTML, y en su lugar sólo les permite. Para lo que está buscando, una combinación de simple_format junto con sanitize debería funcionar bien. Trate de usar esto:

<%=raw sanitize(simple_format(@article.body), :tags => %w(br p)) %>

+0

Perfecto - muchas gracias. ;-) – PlankTon

+4

O incluso mejor aún, los usuarios 'incorporadas h()' Método: '<% = simple_format h @ article.body%>' –

+0

Si usted quiere hacer esto en un modelo o controlador: 'ActionController :: Base.helpers.raw ActionController :: Base.helpers.sanitize ((ActionController :: Base.helpers.simple_format (del cuerpo)), etiquetas: =>% w (ancho p)) ' – richardaday

2

Dependiendo de lo que quiere hacer, puede almacenar los \n tal como es, y luego, cuando se muestra el contenido de la pantalla, utilice (h @comment.content).gsub("\n", '<br>'), que es escapar primero todas las etiquetas HTML, y luego vuelva a colocar la \n con el <br>

6

Si desea etiquetas HTML introducidos en el área de texto visible, pero todavía quiere saltos de línea para mostrar, intente esto:

<%= simple_format(h @article.body) %> 

La "h", cita a toda la HTML special chars y "simple_format" luego convierte los saltos de línea a <br>.

-1

Todo esto se puede evitar mediante el uso de etiquetas &lt;pre&gt;. Esto tiene la ventaja de preservar las pestañas también. por ejemplo,

&lt;pre&gt;&lt;%= @article.body %&gt;&lt;/pre&gt; 
Cuestiones relacionadas