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

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

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

没用

【问题讨论】:

标签: php smarty smarty2


【解决方案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

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 2023-03-03
        • 2023-03-27
        • 1970-01-01
        • 2020-11-17
        • 2016-10-01
        • 1970-01-01
        • 2021-05-10
        相关资源
        最近更新 更多