Replace 如何替换细枝中的打断线

Replace 如何替换细枝中的打断线,replace,twig,Replace,Twig,我想使用TWIG用PHP变量的值填充JavaScript数组 <script type="text/javascript"> var cont=new Array(); {% for key, post in posts %} cont[{{ key }}] = "{{ post.content }}"; {% endfor %} </script> 但这没有帮助。它仍然保留为数不多的管路…有nl2br过滤器:如果您只想拆下制动管路,这将不起作用

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

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

但这没有帮助。它仍然保留为数不多的管路…

有nl2br过滤器:

如果您只想拆下制动管路,这将不起作用:

{{ post.content | replace({"\n":""}) }}
“\”是一个特殊的符号,所以你需要避开它。这将有助于:

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

使用
{{post.content | nl2br}}

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

post.content|replace({"\n":' ', "\r":' '})
即,将
\r
以及
\n
替换为空格。这是因为一些用户输入的内容(特别是Windows上的用户)可能包含
\r
(回车)以及换行符,如果不删除这些换行符,它们似乎仍然会打断Javascript

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

使用Twig编写Javascript的最佳方法(也是很好的方法)(如果你不想要
\r\n
)是这样吗

{{ example|e('js') }}
当然,替换

是可行的,但在使用数据中的数据的javascript中会遇到其他问题。使用javascript escape,它将以您期望的方式完美地编写有效的javascript

有关转义筛选器的详细信息:


必须使用{%spaceless%}{%endspaceless%}标记,如下所示

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

var cont=新数组();
{%为键,在posts%}
cont[{key}}]=“{%spaceless%}{{{post.content}{%endspaceless%}”;
{%endfor%}

享受;-)

不幸的是,这不是JavaScript中上下文转义
\n
\r
中提问的解决方案,因为twig的
nl2br
过滤器是PHP中
nl2br()
函数的简单回退,它根本不会替换
\n
\r
字符,但是将它们替换为

\n\r
,因此代码中仍然有空格。唯一正确的方法是:
{{post.content}replace({'\r\n':'\\r\\n','\n':'\\n','\r':'\\r'}}
您现在还可以使用反勾号(模板文字)将带有换行符的代码放入JavaScript字符串中。
<script type="text/javascript">
   var cont=new Array();
   {% for key, post in posts %}
   cont[{{ key }}] = "{% spaceless %}{{ post.content }}{% endspaceless %}";
   {% endfor %}
</script>