web-dev-qa-db-ja.com

twigの改行を置き換える方法

JavaScript配列にPHP変数の値をTWIGを使用して入力します。

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

問題は、数行のpost変数があるため、上記のコードによりJSコマンドが数行に分割され、複数のコマンドに変換され、エラーが発生することです。

したがって、「新しい行」をすべて「\ n」に置き換える必要があると思います。

私はこのようにしようとしました:

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

しかし、それは助けにはなりません。それはまだ数行のままです…

18
sh3211

同様の問題(ユーザーデータをJavaScriptに出力する)の場合、次のものが必要であることがわかりました。

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

すなわち。 \rおよび\nをスペースに置き換えます。これは、ユーザーが入力した一部のコンテンツ(特にWindowsのユーザー向け)に\r(改行)と改行が含まれている可能性があるためです。

私にとって、nl2brは適切ではありませんでした。ユーザーコンテンツをJavascriptメソッドに(ユーザーが入力した住所をGoogleマップに追加するために)提供していたため、改行、HTML、またはさもないと。

24
Nick F

Twig(必要ない場合は\r\n)を使用してjavascriptを記述する最良の方法(および良い方法)は次のとおりです。

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

<br />の置き換えはもちろん機能しますが、データのデータを使用するJavaScriptで他の問題が発生します。 JavaScriptエスケープを使用して、期待どおりに有効なJavaScriptを完全に記述します。

エスケープフィルターの詳細については:

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

15
Yann Chabot

Nl2brフィルターがあります: http://twig.sensiolabs.org/doc/filters/nl2br.html

9

使用する {{ post.content | nl2br }}

7

ブレーキラインを外したいだけなら、これはうまくいきません:

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

「\」は特別な記号なので、エスケープする必要があります。これは動作します:

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

次のように、{%spaceless%} {%endspaceless%}タグを使用する必要があります。

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

楽しい ;-)

1
user6796613