Smarty 以 strpos 作为开始,strlen 作为结束获取 var 的子字符串

Posted

技术标签:

【中文标题】Smarty 以 strpos 作为开始,strlen 作为结束获取 var 的子字符串【英文标题】:Smarty getting substring of a var with strpos as start and strlen as end 【发布时间】:2011-05-22 08:34:56 【问题描述】:

我在 smarty 中格式化变量时遇到问题。我想知道最好的方法是什么。基本上我有一个字符串 "ABC | DEFGH" 我想让 smarty 得到 "DEFGH" 的子字符串我该怎么做呢?

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

没用

【问题讨论】:

可能重复:***.com/questions/4325283/smarty-substr-a-variable 见thisSmarty话题。 我提交的代码不起作用。 【参考方案1】:

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

【讨论】:

结论 - 不要使用 smarty 上面提到的论坛帖子是关于一个插件的,smarty默认不附带。并且 truncate 并没有按照他的要求做,它只是将字符串切割到一定长度。 从不在 smarty 模板中使用 php 标签,而是使用插件函数 @kris 我同意他们应该谨慎使用,或者尽可能不使用,但显然他们将这些标签放在那里以便您可以使用它们。为什么您会因为不同意而对 8 个月前的帖子投反对票?这当然不是不正确或不好的建议。 如果您更改答案,我可以删除反对票,如果您一段时间不回来,它就会被锁定。【参考方案2】:

刚刚解决了这个问题,没有在 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

【讨论】:

是的!我就知道一定有办法!谢谢兄弟!【参考方案3】:

当像 Jimby 一样使用时:

$var|substr:$bar_at+1

我添加括号或圆括号以使其工作。

$var|substr:($bar_at+1)

【讨论】:

【参考方案4】:

一些关于 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

【讨论】:

以上是关于Smarty 以 strpos 作为开始,strlen 作为结束获取 var 的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

退出 Smarty 手动完成

Smarty 上的价格数字格式

4.5 列表

4.5 列表

strpos用法

strposphp的strpos的坑,记一次