2012-05-07 15 views
9

Chcę wypełnić tablicę JavaScript wartościami ze zmiennych PHP za pomocą TWIG.Jak zamienić linie przerw w gałązce

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

Problemem jest to, że ma zmienną post z kilkoma liniami, tak aby powyższy kod polecenia JS rozdzielone na kilku liniach, które są tłumaczone za wielu poleceń, i ma błąd.

Uważam więc, że muszę zamienić wszystkie "nowe linie" na "\ n".

Próbowałem zrobić tak:

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

Ale to nie pomaga. To nadal pozostać w kilku zdaniach ...

+0

Jedynym prawidłowym sposobem wykonania tej czynności jest: '{{post.treść | replace ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\\ r'})}} ' – caw

Odpowiedz

7
+2

Niestety, to jest nie jest rozwiązaniem dla zadawanego pytania w kontekście ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' "." \ r' znaków w ogóle, ale zastępuje je '
\ n \ r', więc spacje są nadal w kodzie. – Athlan

4

Jeśli chcesz po prostu zdjąć przewody hamulcowe, to nie działa:

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

„\” jest specjalnym znakiem, więc musisz uciec. To będzie działać:

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

Korzystając {{ post.content | nl2br }}

20

Na podobny problem (wpisywanie danych użytkownika w JavaScript), znalazłem następujący było konieczne:

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

tj. zamień \r oraz \n ze spacjami. Dzieje się tak dlatego, że niektóre treści wprowadzone przez użytkownika (zwłaszcza dla użytkowników w systemie Windows) mogą zawierać \r (znaki powrotu karetki), a także podziały wierszy, co wydaje się nadal powodować przerwanie JavaScriptu, jeśli nie zostało usunięte.

Dla mnie nl2br nie był odpowiedni, ponieważ podawałem treść użytkownika do metody Javascript (do dodawania adresów wprowadzanych przez użytkownika do Google Map, co to jest warte), więc nie chciałem żadnej linii breaks, HTML lub w inny sposób.

7

Najlepszym sposobem (i dobry sposób), aby napisać skrypt przy użyciu Twig (jeśli nie chcesz \r\n) jest w ten sposób:

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

Wymiana <br /> Można, oczywiście, praca, ale będzie napotkać inne problemy w javascript przy użyciu danych z twoich danych. Używając javascript escape, będzie on idealnie zapisywać poprawny javascript w sposób, jakiego oczekujesz.

Aby uzyskać więcej informacji na temat filtra ewakuacyjnej:

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

+2

Ta odpowiedź powinna być oznaczona jako poprawna. –

0

Musisz użyć {% bezprzestrzenna%} {% endspaceless%} Tag, jak ten,

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

Enjoy; -)

Powiązane problemy