Saltos de línea y enlaces activos

Cuando el usuario mete saltos de línea y enlaces con código HTML, o sea
con < br/> y < a href>, la función sanitize lo representa correctamente.
Pero yo quiero que si meten saltos de línea y URLs, los saltos de línea
se muestren como saltos de línea, y los enlaces salgan como enlaces
activos…

1.- ¿Conocéis si hay alguna función ya hecha que haga esto? Si no la
hay, haré una y la pondré aquí, por si a alguien le va bien.

2.- Creo que sería mejor guardar el texto tal como se ha introducido, y
aplicar la función (la ya hecha, o una que me haga yo). ¿Qué opináis?

s2

2008/1/22 Fernando C. [email protected]:

1.- ¿Conocéis si hay alguna función ya hecha que haga esto? Si no la
hay, haré una y la pondré aquí, por si a alguien le va bien.

La librería CGI de Ruby te permite escapar/“des-escapar” cadenas de
texto con escapeHTML/unescapeHTML. Escapa/Des-escapa todos los tags,
así que ten cuidado con como lo usas (seguridad de la app). Estoy
seguro que también existen librerías que limpian campos con un número
de tags predefinidos para layouts (permiten ,
, …) pero en
mi caso al menos, esto ha sido algo de overkill.

2.- Creo que sería mejor guardar el texto tal como se ha introducido, y
aplicar la función (la ya hecha, o una que me haga yo). ¿Qué opináis?

Es cuestión de gustos y de lo que vayas a hacer, yo personalmente
prefiero arreglarlo antes de crear el objeto (before_create del model)
pero de nuevo, depende de necesidades. Una ventaja que tienes si lo
haces a la hora de imprimir (en vez de guardar) es que te es más facil
depurar probables errores.

Escapar o desescapar creo que no es lo que busco. La idea no es que
metan HTML y salga bien, sino al revés: que donde no hay HTML sino un
salto de línea se convierta en un < br/>.

Mi preferencia por guardarlo tal cual es porque así es más fácil para el
usuario editarlo, sin ver HTMLs. Lo de depurar que comentas es una
ventaja que no había pensado, pero ciertamente es así.

s2

2008/1/22 Fernando C. [email protected]:

Escapar o desescapar creo que no es lo que busco. La idea no es que
metan HTML y salga bien, sino al revés: que donde no hay HTML sino un
salto de línea se convierta en un < br/>.

Puedes tomar el texto que te inserta el usuario, una funcion donde
reemplaces “\n” por
o

y luego asegurarte de que este texto
no sea escapado, para esto último te mencioné unescapeHTML de CGI.

javier ramirez wrote:

hola,

Escapar o desescapar creo que no es lo que busco. La idea no es que
metan HTML y salga bien, sino al revés: que donde no hay HTML sino un
salto de línea se convierta en un < br/>.

eso exactamente así lo hace simple_format

saludos,

javier ramírez

efectivamente, simple_format me convierte los saltos de línea en br, y
los doble saltos de línea en p. Y buscando más sobre el simple_format en
http://api.rubyonrails.com/classes/ActionView/Helpers/TextHelper.html

he encontrado el auto_link, que me hace el resto del trabajo!!

Así ha quedado:
<%= simple_format auto_link sanitize comentario.texto_completo %>

Una maravilla!!

gracias y s2

Fernando C. wrote:

<%= simple_format auto_link sanitize comentario.texto_completo %>

Perdón: warning: parenthesize argument(s) for future version

Así está bien:
simple_format(auto_link(sanitize(comentario.texto_completo)))

hola,

Escapar o desescapar creo que no es lo que busco. La idea no es que
metan HTML y salga bien, sino al revés: que donde no hay HTML sino un
salto de línea se convierta en un < br/>.

eso exactamente así lo hace simple_format

saludos,

javier ramírez