TinyButStrong模板引擎中含单引号变量致onshow条件失效的解决办法
解决TinyButStrong变量含单引号时onshow条件失效的问题
我之前也碰到过一模一样的坑!本质是当$notice里包含单引号时,直接破坏了when条件语句的字符串结构——比如如果变量值是It's a warning,解析后的条件会变成when It's a warning!='',这里的单引号提前闭合,TBS根本没法正确识别你的判断逻辑,自然就失效了。
给你两个靠谱的解决方案:
方案1:用TBS内置的isset判断(推荐)
TinyButStrong本身就提供了判断变量是否非空的简化写法,完全不用手动写!=''这种容易踩坑的逻辑,直接避开引号冲突:
<div class="notice">[onshow;block=div;isset=[var.notice;noerr]][var.notice;noerr]</div>
isset=[var.notice;noerr]会自动检查变量是否存在且不是空值(包括空字符串、null这些情况),比手动判断安全得多。
方案2:转义变量里的单引号再判断
如果你一定要保留手动判断不等于空的逻辑,可以给变量加个转义规则,把单引号转成\',确保条件语句的引号结构完整:
<div class="notice">[onshow;block=div;when [var.notice;noerr;strconv=escq]!=''][var.notice;noerr]</div>
strconv=escq是TBS专门用来转义单引号的规则,这样哪怕变量里有N个单引号,条件语句的语法也不会出错。
另外提个小建议:在输出变量到HTML的时候,最好加上strconv=html来转义特殊字符,既能避免XSS风险,也能减少各种奇怪的语法冲突哦~
内容的提问来源于stack exchange,提问作者desbest
相关产品推荐
相关产品推荐

