Smarty获取var的子字符串,其中strpos为start,strlen为end

时间:2010-12-08 16:46:29

标签: php smarty smarty2

我在smarty中遇到格式化变量问题。我想知道最好的方法是什么。基本上我有一个字符串“ABC | DEFGH”我想要聪明地获得“DEFGH”的子串我将如何去做这个?

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

不起作用

4 个答案:

答案 0 :(得分:26)

刚刚在PHP中设置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
  • DEFGH
  • 答案 1 :(得分:5)

    有关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)}
    

    上述人员在Smarty 3.1.19进行了测试。

    你也应该知道在以前的版本中(在Smarty 3.1之前)如果你的字符串是UTF-8字符,你应该使用mb_函数。

    如果安装了mbstring扩展名,则在Smarty 3.1中,Smarty会自动使用mb_函数,因此utf-8字符不会出现任何问题。

    您可以阅读有关 Smarty utf-8 encoding

    的更多信息

    答案 2 :(得分:4)

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

    答案 3 :(得分:0)

    像Jimby一样使用时:

    {$var|substr:$bar_at+1}
    

    我添加括号或圆括号以使其有效。

    {$var|substr:($bar_at+1)}