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

KJY*_*葉家仁 9 php smarty smarty2

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

{$var|substr:strpos:"|":strlen}
Run Code Online (Sandbox Code Playgroud)

不起作用

小智 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>
Run Code Online (Sandbox Code Playgroud)

这将打印:

  • ABC | DEFGH
  • ABC
  • DEFGH

    Mar*_*łek 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)}
    
    Run Code Online (Sandbox Code Playgroud)

    这将DEFGH在开头给你空间(|在你的问题和我的例子中之前和是var里面的空格)并且你想要获得没有空格的字符串,你应该在这种情况下使用+2而不是+1:

    {$var|substr:($var|strpos:"|"+2)}
    
    Run Code Online (Sandbox Code Playgroud)

    以上的那些在Smarty中进行了测试3.1.19.

    您还应该知道在以前的版本中(在Smarty 3.1之前),如果您的字符串中包含UTF-8字符,则应该使用mb_函数.

    从Smarty 3.1开始,如果mbstring安装了扩展,Smarty会mb_在这种情况下自动使用函数,因此utf-8字符不会出现任何问题.

    您可以阅读有关Smarty utf-8编码的更多信息