【发布时间】:2011-05-22 08:34:56
【问题描述】:
我在 smarty 中格式化变量时遇到问题。我想知道最好的方法是什么。基本上我有一个字符串 "ABC | DEFGH" 我想让 smarty 得到 "DEFGH" 的子字符串我该怎么做呢?
{$var|substr:strpos:"|":strlen}
没用
【问题讨论】:
-
见thisSmarty话题。
-
我提交的代码不起作用。
我在 smarty 中格式化变量时遇到问题。我想知道最好的方法是什么。基本上我有一个字符串 "ABC | DEFGH" 我想让 smarty 得到 "DEFGH" 的子字符串我该怎么做呢?
{$var|substr:strpos:"|":strlen}
没用
【问题讨论】:
smarty 中不存在这些功能。在将其发送到模板之前,您必须将其拆分为 PHP。或者您可以编写自己的拆分功能 smarty 插件。或者在模板中使用 {php} 标签,但我会避免使用该解决方案,因为它违背了“精神”和使用 smarty 的目的、表示和逻辑的分离等。
【讨论】:
刚刚解决了这个问题,没有在 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>
这将打印:
【讨论】:
当像 Jimby 一样使用时:
{$var|substr:$bar_at+1}
我添加括号或圆括号以使其工作。
{$var|substr:($bar_at+1)}
【讨论】:
一些关于 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 内的空格),并且您想获得没有空格的字符串,您应该在这种情况下使用 @987654327 @而不是+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 encoding
【讨论】: