2012-05-07 7 views
9

Quiero completar una matriz de JavaScript con valores de variables de PHP usando TWIG.Cómo reemplazar líneas de corte en ramita

<script type="text/javascript"> 
    var cont=new Array(); 
    {% for key, post in posts %} 
    cont[{{ key }}] = "{{ post.content }}"; 
    {% endfor %} 
</script> 

El problema es que tengo post variable, con varias líneas, por lo que el código anterior crea comandos JS separados a pocas líneas, que se traduce como varios comandos, y tengo un error.

Así que creo que tengo que reemplazar todas las 'nuevas líneas' por "\ n".

Se ha intentado realizar la siguiente manera:

cont[{{ key }}] = "{{ post.content | replace({"\n":"<br>"}) }}"; 

Pero no ayuda. Es aún permanecer como unas líneas ...

+0

La única forma correcta de hacerlo es la siguiente: '{{post.contenido | replace ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\\ r'})}} ' – caw

Respuesta

7
+2

Lamentablemente, esto es no es una solución para preguntas preguntadas en contexto escapando '\ n' y' \ r' en JavaScript, porque el filtro 'nl2br' de twig es un simple retorno a la función' nl2br() 'en PHP, que no reemplaza' \ n' y ' \ r' caracteres en absoluto, pero los reemplaza por '
\ n \ r', por lo que los espacios en blanco todavía están en el código. – Athlan

4

Si desea simplemente eliminar las líneas de freno, esto no está funcionando:

{{ post.content | replace({"\n":""}) }} 

'\' es un signo especial, entonces necesitas escapar de eso Esto funcionará:

{{ post.content | replace({"\\n":""}) }} 
4

Uso {{ post.content | nl2br }}

20

Para un problema similar (la salida de datos de usuario en Javascript), que encontré fue necesaria la siguiente:

post.content|replace({"\n":' ', "\r":' '}) 

es decir. reemplace \r así como \n con espacios. Esto se debe a que algunos contenidos ingresados ​​por el usuario (especialmente para usuarios en Windows) pueden contener \r (retornos de carro) así como también saltos de línea, que parece que aún rompen Javascript si no se eliminan.

Para mí, nl2br no era adecuado, porque estaba alimentando el contenido del usuario en un método Javascript (para agregar direcciones introducidas por el usuario a Google Map, por lo que vale), así que no quería ninguna línea breaks, HTML o de otro modo.

7

La mejor manera (y el buen sentido) para escribir algo de JavaScript utilizando la ramita (si no desea \r\n) es de esta manera:

{{ example|e('js') }} 

Sustitución <br /> puede, por supuesto, el trabajo, pero se encuentra otros problemas en javascript usando datos de tus datos. Usando javascript escape, escribirá perfectamente javascript válidos de la manera que esperaría que hiciera.

Para obtener más información acerca de filtro de escape:

http://twig.sensiolabs.org/doc/filters/escape.html

+2

Esta respuesta debe marcarse como la correcta. –

0

Usted tiene que usar una {% aespacial%} {%% endspaceless} TAG, de esta manera,

<script type="text/javascript"> 
    var cont=new Array(); 
    {% for key, post in posts %} 
    cont[{{ key }}] = "{% spaceless %}{{ post.content }}{% endspaceless %}"; 
    {% endfor %} 
</script> 

Disfrute; -)

Cuestiones relacionadas