Smarty变量赋值链接后truncate过滤器失效问题求助
解决Smarty变量赋值后truncate过滤器失效的问题
我来帮你排查这个问题!你的代码之所以无法正常工作,核心是变量赋值时的nofilter用法错误,导致$book_link变量的内容不符合预期,进而让truncate过滤器无法按你想要的方式处理。
问题根源分析
你原来的赋值代码:
{assign var="book_link" value="`$smarty.capture.$name` nofilter"}
这里犯了两个关键错误:
- 你把
nofilter作为字符串的一部分拼到了value里,而不是把它当作Smarty过滤器来使用。这会导致$book_link的内容变成「捕获的文本 + 字符串" nofilter"」,而不是去除转义后的捕获内容。 - 用反引号包裹
$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变成:
<a href="book.html">Smarty从入门到精通</a> nofilter
而修改后的写法会得到:
<a href="book.html">Smarty从入门到精通</a>
此时truncate:50会正确对这个原始HTML内容进行截断处理,不会包含多余的字符串或转义字符。
内容的提问来源于stack exchange,提问作者datnguyen95
相关产品推荐
相关产品推荐

