2012-05-07 16 views
9

Desidero riempire un array JavaScript con valori da variabili PHP che utilizzano TWIG.Come sostituire le linee di interruzione nel ramoscello

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

Il problema è che ho post variabile con diverse linee, in modo che il codice sopra rendono comandi JS separate da poche righe, che viene tradotto come diversi comandi, e ho un errore.

Quindi penso che ho bisogno di sostituire tutte le "nuove linee" in "\ n".

ho cercato di fare in questo modo:

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

Ma non aiuta. E 'ancora rimanere in poche righe ...

+0

L'unico modo corretto per eseguire questa operazione è il seguente: '{{post.contenuto | replace ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\\ r'})}} ' – caw

risposta

7
+2

Sfortunatamente, questo è non una soluzione per la domanda posta nel contesto che sfugge a '\ n' e' \ r' in JavaScript, perché il filtro 'nl2br' di twig è semplice fallback alla funzione' nl2br() 'in PHP, che non sostituisce' \ n' e ' \ r' caratteri, ma li sostituisce con '
\ n \ r', quindi gli spazi bianchi sono ancora in codice. – Athlan

4

Se si desidera rimuovere solo le linee dei freni, questo non sta funzionando:

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

'\' è un segno speciale, quindi devi fuggire. Ciò funzionerà:

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

Usa {{ post.content | nl2br }}

20

Per un problema simile (output dati utente in Javascript), ho trovato il seguente era necessario:

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

es. sostituire \r e \n con spazi. Ciò è dovuto al fatto che alcuni contenuti inseriti dall'utente (in particolare per gli utenti su Windows) possono contenere \r (ritorni a capo) e interruzioni di riga, che a quanto pare continuano a violare Javascript se non vengono rimossi.

Per me, nl2br non era adatto, perché stavo inserendo il contenuto dell'utente in un metodo Javascript (per aggiungere gli indirizzi immessi dall'utente a una mappa di Google, per quello che vale), quindi non volevo alcuna linea pause, HTML o altro.

7

Il modo migliore (e buono) di scrivere alcuni javascript con Twig (se non si vuole \r\n) è in questo modo:

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

Sostituzione <br /> può, naturalmente, il lavoro, ma si incontrare altri problemi in javascript utilizzando i dati dai tuoi dati. Usando javascript escape, scriverà perfettamente javascript valido nel modo in cui ti aspetteresti che faccia.

Per ulteriori informazioni sul filtro di fuga:

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

+2

Questa risposta dovrebbe essere contrassegnata come corretta. –

0

Devi usare un {% senza spazio%} {% endspaceless%} TAG, in questo modo,

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

Godetevi; -)

Problemi correlati