【问题标题】:{strip}: how to avoid unintended whitespace removal?{strip}:如何避免意外删除空格?
【发布时间】:2011-11-01 09:01:06
【问题描述】:
{strip}
<div
     class="x"
>
{/strip}

变成

<divclass="x">

这不是任何人想要的。

所以,问题是:有什么办法可以避免这种情况吗?想象的方法:

  • 使用参数或其他智能函数用空格替换新行
  • 添加未剥离/修剪的受保护空间

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

【问题讨论】:

  • @Tomalak Geret'kal 函数 strip,不是修饰符;)
  • 亲爱的@c69,我编辑了您的问题,因为我遇到了同样的问题,但是“将新行转换为空格”并没有作为搜索查询出现在我的脑海中。希望没事。

标签: php smarty strip


【解决方案1】:

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

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

或通过regex_replace modifier 运行捕获的内容(与拆分基本相同,但开销更大):

{$smarty.capture.spaces|regex_replace:"#\s+#":" "}

或放入一个名为 trimwhitespace 的新 custom block plugin,它使用 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 内容,但它们会破坏包括 &lt;script&gt;&lt;pre&gt; 标记在内的内容。如果你需要这些,你想使用包装好的输出过滤器。

如果您希望所有输出都通过该过滤器运行,请忘记更改模板并将$smarty-&gt;loadFilter('output', 'trimwhitespace'); 添加到您的设置中。

【讨论】:

    【解决方案2】:

    保护个人空间:

    {strip}
    <div class="first{" "}
      {"second "}
      third">
    {/strip}
    

    变成

    <div class="first second third">
    

    smarty v3 对我来说很好用。

    【讨论】:

    • 也适用于 Smarty v2。
    • 谢谢,您知道是否可以在每个模板中避免这样做,而是在header.tpl 的顶部和footer.tpl 的底部进行。 Smarty标签好像没有通过模板传输?
    【解决方案3】:

    将您的代码分配给一个变量并尝试{$articleTitle|strip:'&amp;nbsp;'}

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多