我在 smarty 中格式化变量时遇到问题。我想知道最好的方法是什么。基本上我有一个字符串“ABC | DEFGH”,我想让 smarty 得到“DEFGH”的子字符串,我将如何去做呢?
{$var|substr:strpos:"|":strlen}
不工作
刚刚解决了这个问题,没有在 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>
这将打印:
有关 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_
函数。
从 Smarty 3.1 开始,如果mbstring
安装了扩展,Smarty 会在这种情况下自动使用mb_
函数,因此 utf-8 字符不会有任何问题。
您可以阅读有关Smarty utf-8 编码的更多信息
smarty中不存在这些功能。在将其发送到模板之前,您必须在 PHP 中拆分它。或者您可以编写自己的拆分功能 smarty 插件。或者在模板中使用 {php} 标签,但我会避免使用该解决方案,因为它违背了“精神”和使用 smarty 的目的、表示和逻辑的分离等。
像 Jimby 一样使用时:
{$var|substr:$bar_at+1}
我添加括号或圆括号以使其工作。
{$var|substr:($bar_at+1)}