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>"}) }}";
しかし、それは助けにはなりません。それはまだ数行のままです…
同様の問題(ユーザーデータをJavaScriptに出力する)の場合、次のものが必要であることがわかりました。
post.content|replace({"\n":' ', "\r":' '})
すなわち。 \r
および\n
をスペースに置き換えます。これは、ユーザーが入力した一部のコンテンツ(特にWindowsのユーザー向け)に\r
(改行)と改行が含まれている可能性があるためです。
私にとって、nl2brは適切ではありませんでした。ユーザーコンテンツをJavascriptメソッドに(ユーザーが入力した住所をGoogleマップに追加するために)提供していたため、改行、HTML、またはさもないと。
Twig(必要ない場合は\r\n
)を使用してjavascriptを記述する最良の方法(および良い方法)は次のとおりです。
{{ example|e('js') }}
<br />
の置き換えはもちろん機能しますが、データのデータを使用するJavaScriptで他の問題が発生します。 JavaScriptエスケープを使用して、期待どおりに有効なJavaScriptを完全に記述します。
エスケープフィルターの詳細については:
Nl2brフィルターがあります: http://twig.sensiolabs.org/doc/filters/nl2br.html
使用する {{ post.content | nl2br }}
ブレーキラインを外したいだけなら、これはうまくいきません:
{{ post.content | replace({"\n":""}) }}
「\」は特別な記号なので、エスケープする必要があります。これは動作します:
{{ post.content | replace({"\\n":""}) }}
次のように、{%spaceless%} {%endspaceless%}タグを使用する必要があります。
<script type="text/javascript">
var cont=new Array();
{% for key, post in posts %}
cont[{{ key }}] = "{% spaceless %}{{ post.content }}{% endspaceless %}";
{% endfor %}
</script>
楽しい ;-)