我正在智能中的问题格式化变量。我想知道最好的方法是什么。基本上,我有一个字符串“ ABC | Defgh”,我希望Smarty能够获得“ Defgh”的子字符串,该如何做到这一点?

{$var|substr:strpos:"|":strlen}

不起作用

有帮助吗?

解决方案

仅在PHP中和使用内置功能包装器中解决此问题而不将VAR设置为“ var”。

假设:$ var =“ abc | defgh”;

{assign var="bar_at" value=$var|strpos:"|"}
<li>{$var}</li>
<li>{$var|substr:0:$bar_at}</li>
<li>{$var|substr:$bar_at+1}</li>

这将打印:

  • ABC | Defgh
  • ABC
  • 迪格
  • 其他提示

    有关Smarty 3的一些信息,如果有人想在Smarty 3中实现相同的目标,而不是在Smarty 2中实现。

    首先,您需要添加括号以使其正常工作。 substr:$bar_at+1 不做 substr:($bar_at+1) 将工作。

    但是实际上,您可以使用更简单的语法:

    {assign var="var" value="ABC | DEFGH"}
    
    {$var|substr:($var|strpos:"|"+1)}
    

    这会给你 DEFGH 一开始就有空间(之前和 | 在您的问题和我的示例中,VAR中的空格是否是),并且由于您想在没有空间的情况下获得弦,在这种情况下应该使用 +2 代替 +1:

    {$var|substr:($var|strpos:"|"+2)}
    

    上面的那些经过智慧测试 3.1.19.

    您还应该知道,在以前的版本(在Smarty 3.1之前),如果您在字符串UTF-8字符中,则应该使用 mb_ 功能。

    从Smarty 3.1开始,以防万一 mbstring 安装扩展名智能自动使用 mb_ 在这种情况下功能,因此UTF-8字符不会有任何问题。

    您可以阅读更多有关 智能UTF-8编码

    这些功能在Smarty中不存在。在将其发送到模板之前,您必须将其拆分为PHP。或者,您可以编写自己的拆分功能智能插件。或在模板中使用{php}标签,但是我会避免使用该解决方案,因为它违背了“精神”和使用智能,演示文稿和逻辑等的目的等。

    当使用吉姆比时:

    {$var|substr:$bar_at+1}
    

    我添加括号或圆形支架以使其正常工作。

    {$var|substr:($bar_at+1)}
    
    许可以下: CC-BY-SA归因
    不隶属于 StackOverflow
    scroll top