24

我想使用 TWIG 用 PHP 变量中的值填充 JavaScript 数组。

<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>"}) }}";

但这无济于事。它仍然保持在几行......</p>

4

6 回答 6

30

对于类似的问题(将用户数据输出到 Javascript),我发现以下是必要的:

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

IE。替换\r以及替换为\n空格。这是因为一些用户输入的内容(尤其是对于 Windows 上的用户)可能包含\r(回车)以及换行符,如果不删除它们似乎仍然会破坏 Javascript。

对我来说,nl2br 不适合,因为我将用户内容输入到 Javascript 方法中(用于将用户输入的地址添加到谷歌地图,值得一提),所以我不想要任何换行符、HTML 或否则。

于 2014-11-18T10:09:39.877 回答
22

使用 Twig(如果您不想要\r\n)编写一些 javascript 的最佳方法(也是好方法)是这样的:

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

替换<br />当然可以,但是您会在使用数据中的数据的 javascript 中遇到其他问题。使用 javascript 转义,它将按照您期望的方式完美地编写有效的 javascript。

有关转义过滤器的更多信息:

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

于 2015-10-22T20:30:11.810 回答
11

有 nl2br 过滤器:http ://twig.sensiolabs.org/doc/filters/nl2br.html

于 2012-06-12T09:56:20.770 回答
9

利用{{ post.content | nl2br }}

于 2014-08-28T16:38:02.283 回答
6

如果您只想卸下刹车线,这是行不通的:

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

'\' 是一个特殊的符号,所以你需要转义它。这将起作用:

{{ post.content | replace({"\\n":""}) }}
于 2013-07-17T18:50:09.910 回答
2

你必须使用 {% spaceless %}{% endspaceless %} TAG,像这样,

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

享受 ;-)

于 2016-09-05T13:36:04.183 回答