【问题标题】:How to replace break lines in twig如何替换树枝中的折线
【发布时间】:2012-05-07 19:24:45
【问题描述】:

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

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

【问题讨论】:

  • 唯一正确的方法是:{{ post.content | replace({ '\r\n': '\\r\\n', '\n': '\\n', '\r': '\\r' }) }}
  • 您现在还可以使用反引号(模板文字)将带有换行符的代码放入 JavaScript 字符串中。

标签: replace twig


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这应该是公认的答案,谢谢!
    【解决方案3】:

    【讨论】:

    • 不幸的是,这不是解决在 JavaScript 中转义 \n\r 的问题的解决方案,因为 twig 的 nl2br 过滤器是 PHP 中 nl2br() 函数的简单回退,即根本不替换 \n\r 字符,而是用 &lt;br /&gt;\n\r 替换它们,所以空格仍然在代码中。
    【解决方案4】:

    使用{{ post.content | nl2br }}

    【讨论】:

    • nl2br 不会替换 \n,它只会在它前面添加 `
      '...
    【解决方案5】:

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

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

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

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

    【讨论】:

      【解决方案6】:

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

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

      享受 ;-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 2015-04-22
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        • 2022-01-02
        相关资源
        最近更新 更多