You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Smarty变量赋值链接后truncate过滤器失效问题求助

解决Smarty变量赋值后truncate过滤器失效的问题

我来帮你排查这个问题!你的代码之所以无法正常工作,核心是变量赋值时的nofilter用法错误,导致$book_link变量的内容不符合预期,进而让truncate过滤器无法按你想要的方式处理。

问题根源分析

你原来的赋值代码:

{assign var="book_link" value="`$smarty.capture.$name` nofilter"}

这里犯了两个关键错误:

  1. 你把nofilter作为字符串的一部分拼到了value里,而不是把它当作Smarty过滤器来使用。这会导致$book_link的内容变成「捕获的文本 + 字符串" nofilter"」,而不是去除转义后的捕获内容。
  2. 用反引号包裹$smarty.capture.$name虽然能实现变量插值,但结合后面的字符串拼接,会让Smarty把整个内容当作普通文本处理,丢失了nofilter本该起到的「禁止自动转义」作用。

正确的解决方案

你需要把nofilter作为过滤器应用在赋值的变量上,而不是拼到字符串里。修改后的赋值代码如下:

{assign var="book_link" value=$smarty.capture.$name nofilter}

这样$smarty.capture.$name的内容会被正确赋值给$book_link,同时nofilter会禁止Smarty对捕获的内容进行自动转义。

之后再使用truncate过滤器就可以正常工作了:

<div class="title-book">{$book_link|truncate:50}</div>

额外验证

假设$smarty.capture.$name的内容是<a href="book.html">Smarty从入门到精通</a>,原来的写法会让$book_link变成:

&lt;a href=&quot;book.html&quot;&gt;Smarty从入门到精通&lt;/a&gt; nofilter

而修改后的写法会得到:

<a href="book.html">Smarty从入门到精通</a>

此时truncate:50会正确对这个原始HTML内容进行截断处理,不会包含多余的字符串或转义字符。

内容的提问来源于stack exchange,提问作者datnguyen95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:11