如何更换树枝上的断裂线

时间:2012-05-07 19:24:46

标签: replace twig

我想使用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>"}) }}";

但它没有帮助。它仍然只停留几行...

6 个答案:

答案 0 :(得分:24)

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

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

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

对我来说,nl2br不合适,因为我将用户内容提供给Javascript方法(用于将用户输入的地址添加到Google Map中,因为它值得),所以我不想要任何换行符,HTML或其他。

答案 1 :(得分:15)

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

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

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

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

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

答案 2 :(得分:9)

答案 3 :(得分:6)

使用{{ post.content | nl2br }}

答案 4 :(得分:4)

如果您只想取下制动线,则无效:

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

'\'是一个特殊的标志,所以你需要逃避它。这将有效:

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

答案 5 :(得分:1)

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

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

享受; - )