2012-05-07 10 views
9

Ich möchte ein JavaScript-Array mit Werten aus PHP-Variablen mit TWIG füllen.So ersetzen Sie Bruchlinien in Zweig

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

Das Problem ist, dass ich post Variable mit mehreren Zeilen haben, also der obige Code JS Befehle Zeilen getrennt machen, ist, dass mehrere Befehle übersetzt, und ich habe einen Fehler.

Also ich denke, dass ich alle "neuen Zeilen" zu "\ n" ersetzen muss.

Ich habe versucht, wie dies zu tun:

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

Aber es hilft nicht. Es bleibt immer noch so wenige Zeilen ...

+0

Der einzige richtige Weg, dies zu tun ist der folgende: '{{post.Inhalt | replace ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\' r '}}} ' – caw

Antwort

7
+2

Das ist leider keine Lösung für die gestellte Frage im Kontext, die '\ n' und' \ r' in JavaScript entkommt, weil twigs 'nl2br'-Filter ein einfaches Fallback auf 'nl2br()' -Funktion in PHP ist, die '\ n' und' nicht ersetzt \ r' Zeichen überhaupt, aber ersetzt sie durch '
\ n \ r', also whitespaces sind noch im Code. – Athlan

4

Wenn Sie nur wollen, Bremsleitungen entfernen, das nicht funktioniert:

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

‚\‘ ist ein besonderes Zeichen, also musst du ihm entkommen. Dies funktioniert:

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

Verwenden {{ post.content | nl2br }}

20

Für ein ähnliches Problem (Benutzerdaten in Javascript ausgibt), fand ich folgendes notwendig war:

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

dh. Ersetzen Sie \r sowie \n mit Leerzeichen. Dies liegt daran, dass einige von Benutzern eingegebene Inhalte (insbesondere für Benutzer unter Windows) möglicherweise \r (Zeilenumbrüche) sowie Zeilenumbrüche enthalten, die nach wie vor JavaScript beschädigen, wenn sie nicht entfernt werden.

Für mich war nl2br nicht geeignet, weil ich den Benutzerinhalt in eine Javascript-Methode fütterte (zum Hinzufügen von Benutzer-eingegebenen Adressen zu einer Google Map, für was es wert ist), also wollte ich keine Zeile bricht, HTML oder anders.

7

Der beste Weg (und eine gute Art und Weise) einige Javascript verwenden Zweig zu schreiben (wenn Sie nicht \r\n wollen) ist auf diese Weise:

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

<br /> kann austauschen, natürlich Arbeit, aber Sie werden treten andere Probleme in Javascript auf, die Daten von Ihren Daten verwenden. Mit JavaScript Escape wird es perfekt schreiben Javascript so, wie Sie es erwarten würde.

Weitere Informationen zu Escape Filter:

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

+2

Diese Antwort sollte als die richtige markiert werden. –

0

Sie haben eine {% spaceless%} verwenden {% endspaceless%} TAG, wie diese,

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

Genießen; -)

Verwandte Themen