dede循环变量e怎么用?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文

e 的含义

在 DedeCMS 的模板标签中,e 是一个修饰符,它的全称是 escape,意为“转义”或“逃逸”。

dede循环变量加e
(图片来源网络,侵删)

它的主要作用是:将变量中的 HTML 特殊字符(如 <, >, &, , )进行转义,以纯文本的形式显示出来。

为什么要这么做? 这是为了防止 XSS(跨站脚本攻击),如果用户提交的内容中包含了恶意的 JavaScript 代码,<script>alert('hack')</script>,如果不进行转义,这段代码就会被浏览器执行,可能导致网站安全漏洞或页面被篡改,加上 e 修饰符后,这段代码会原样显示为文本 <script>alert('hack')</script>,而不会被浏览器解析执行。


如何使用 e 修饰符

e 修饰符直接加在循环变量的后面,语法非常简单。

基本语法

{dede:field.变量名e/}

在循环标签(如 arclist, list, loop 等)中,通常是:

dede循环变量加e
(图片来源网络,侵删)
{dede:arclist ...}
    <li>
        <h3>[field:title function='(strlen(@me)>30 ? cn_substr(@me, 30)."..." : @me)'/]</h3>
        <p>[field:contente/]...</p> <!-- 注意这里的 e -->
    </li>
{/dede:arclist}

具体应用场景与示例

我们通过最常见的 arclist(文章列表)和 list(列表页)标签来看 e 的具体用法。

示例1:在 arclist 标签中使用

假设我们要在首页调用文章列表,并显示文章的摘要,文章摘要可能是用户从后台编辑器中粘贴的,里面可能包含 HTML 标签。

不使用 e 修饰符(有风险)

{dede:arclist typeid='1' row='5'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:description/]</p> <!-- 直接输出,可能包含HTML标签 -->
    </li>
{/dede:arclist}
  • 结果:如果某篇文章的摘要内容是 <b>加粗文字</b> <script>alert('xss')</script>,那么页面会显示为:
    • 加粗文字 (文字会加粗显示)
    • 并会执行 alert('xss') 脚本(这是危险的!)。

使用 e 修饰符(安全)

dede循环变量加e
(图片来源网络,侵删)
{dede:arclist typeid='1' row='5'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:descriptione/]</p> <!-- 加上 e,安全输出 -->
    </li>
{/dede:arclist}
  • 结果:同样的内容 <b>加粗文字</b> <script>alert('xss')</script>,页面会原样显示为纯文本:
    • <b>加粗文字</b> <script>alert('xss')</script>
    • 所有 HTML 标签都被转义了,浏览器不会执行它们,保证了安全。

示例2:在 list 标签中使用

在列表页,我们同样需要处理文章内容或摘要。

场景:在列表页显示文章的部分内容,并截取 200 个字符。

不使用 e 修饰符

{dede:list pagesize='10'}
    <article>
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <div class="content">
            [field:content function='cn_substr(@me, 200)'/]
        </div>
    </article>
{/dede:list}
  • 风险:如果文章开头就是 <img src='...'><b>你好</b>,这些标签会直接被渲染。

使用 e 修饰符

{dede:list pagesize='10'}
    <article>
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <div class="content">
            [field:contente function='cn_substr(@me, 200)'/]
        </div>
    </article>
{/dede:list}
  • 效果function='cn_substr(@me, 200)' 先截取 200 个字符,e 修饰符会将这 200 个字符中的 HTML 标签进行转义,最终输出的是纯文本内容,非常适合用于摘要列表。

e 与其他修饰符/函数的结合使用

e 可以和其他函数或修饰符结合使用,顺序很重要。e 是最后执行的。

语法:[field:变量名 function='函数' e/]

示例:截取标题并转义 可能很长,并且包含特殊字符。

{dede:arclist ...}
    <h3>[field:title function='(strlen(@me)>40 ? cn_substr(@me, 40)."..." : @me)'/]</h3> <!-- 不安全 -->
    <h3>[field:title function='(strlen(@me)>40 ? cn_substr(@me, 40)."..." : @me)' e/]</h3> <!-- 安全 -->
{/dede:arclist}

执行流程解析(安全版)

  1. @me:获取完整的原始标题。
  2. strlen(@me)>40 ? ... : @me长度是否超过 40。
  3. cn_substr(@me, 40):如果超过,则截取前 40 个字符。
  4. :在截取的字符串后加上省略号。
  5. e:将整个处理过的字符串(这是一个很长的标题...”)中的 HTML 标签进行转义,确保安全输出。

总结与最佳实践

修饰符 作用 适用场景 示例
e 转义 HTML 标签,防止 XSS 攻击,输出纯文本。 所有用户可输入的内容,如文章标题、内容、评论、留言等。 [field:titlee/]
[field:descriptione/]
(无) 直接输出,保留 HTML 标签的原始功能。 管理员可控的内容,如首页的公告、指定栏目下的文章详情页等,需要保留格式。 [field:title/]
[field:description/]

核心建议:

  1. 安全第一:对于任何来自前台用户输入并可能被显示在页面上的数据,强烈建议使用 e 修饰符。
  2. 区分场景:只有在 100% 确定内容是安全的(比如是后台管理员自己编辑的,且不会包含恶意脚本),并且需要保留其 HTML 格式时,才不使用 e
  3. 养成习惯:在编写 DedeCMS 模板时,养成为用户生成的内容(如 title, description, content 等)加上 e 的好习惯,可以大大提升网站的安全性。

当你不确定某个变量里会不会有“捣乱”的 HTML 标签时,就给它加上 e,让它老老实实当个文本。

-- 展开阅读全文 --
头像
dede发号中心源码如何获取或使用?
« 上一篇 今天
汇编语言与C语言如何对应?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]