{strip}
<div
     class="x"
>
{/strip}

变成
<divclass="x">

那不是任何人想要的。

所以,问题是:有什么办法可以避免这种情况?想象的方法:
  • 使用参数或其他智能函数
  • 用空格替换新行
  • 添加未剥离/修剪的 protected 空间

  • 他们论坛上的This topic没有解决方案,(除了-添加您自己的自定义标签)。另外,请不要提供原始PHP或任何其他语言/框架的解决方案。

    最佳答案

    您可以使用@dev的方法,然后使用capture数据并通过strip modifier运行它:

    {capture name="spaces"}
    <div
         class="x"
    > ... </div>
    {/capture}
    {$smarty.capture.spaces|strip:" "}
    

    或通过regex_replace modifier运行捕获的内容(本质上与split相同,但开销更多):
    {$smarty.capture.spaces|regex_replace:"#\s+#":" "}
    

    或放入一个新的custom block plugin(称为trimwhitespace),它使用outputfilter trimwhitespace:
    <?php
    function smarty_block_trimwhitespace($params, $content, Smarty_Internal_Template $template, &$repeat)
    {
      require_once SMARTY_PLUGINS_DIR . 'outputfilter.trimwhitespace.php';
      return smarty_outputfilter_trimwhitespace($content, $template->smarty);
    }
    

    将该文件命名为block.trimwhitespace.php并将其放置在plugins_dir中。在模板中使用它:
    {trimwhitespace}
    <div
         class="x"
    > ... </div>
    {/trimwhitespace}
    

    虽然这两种修改器方法都适用于简单的HTML东西,但它们对于包括<script><pre>标记的内容来说却很糟糕。如果需要这些,则需要使用包装好的输出过滤器。

    如果您希望所有输出都通过该过滤器运行,则无需更改模板,而是将$smarty->loadFilter('output', 'trimwhitespace');添加到设置中。

    关于php - {strip}:如何避免意外删除空格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7964317/

    10-11 19:00