我想使用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>"}) }}";
但它没有帮助。它仍然只停留几行...
答案 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。
有关转义过滤器的更多信息:
答案 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>
享受; - )