Smarty以strpos为start和strlen作为结尾处将VAR的子弦作为开始
题
我正在智能中的问题格式化变量。我想知道最好的方法是什么。基本上,我有一个字符串“ 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>
这将打印:
其他提示
有关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)}
不隶属于 StackOverflow