{strip}:如何避免意外的空白删除?

时间:2011-11-01 09:01:06

标签: php smarty strip

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

变为

<divclass="x">

这不是任何人想要的。

所以,问题是:有什么方法可以解决这个问题吗?想象的方法:

  • 使用空格,使用参数或其他智能功能替换新行
  • 添加未剥离/发送的受保护空间
他们论坛上的

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

3 个答案:

答案 0 :(得分:4)

您可以使用@ 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+#":" "}

或放入一个名为trim 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>标记的内容进行分解。如果你需要那些,你想要使用包装的outputfilter。

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

答案 1 :(得分:3)

保护个人空间:

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

变为

<div class="first second third">
使用smarty v3

对我来说很好。

答案 2 :(得分:1)

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