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

(图片来源网络,侵删)
它的主要作用是:将变量中的 HTML 特殊字符(如 <, >, &, , )进行转义,以纯文本的形式显示出来。
为什么要这么做?
这是为了防止 XSS(跨站脚本攻击),如果用户提交的内容中包含了恶意的 JavaScript 代码,<script>alert('hack')</script>,如果不进行转义,这段代码就会被浏览器执行,可能导致网站安全漏洞或页面被篡改,加上 e 修饰符后,这段代码会原样显示为文本 <script>alert('hack')</script>,而不会被浏览器解析执行。
如何使用 e 修饰符
e 修饰符直接加在循环变量的后面,语法非常简单。
基本语法
{dede:field.变量名e/}
在循环标签(如 arclist, list, loop 等)中,通常是:

(图片来源网络,侵删)
{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: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}
执行流程解析(安全版):
@me:获取完整的原始标题。strlen(@me)>40 ? ... : @me长度是否超过 40。cn_substr(@me, 40):如果超过,则截取前 40 个字符。- :在截取的字符串后加上省略号。
e:将整个处理过的字符串(这是一个很长的标题...”)中的 HTML 标签进行转义,确保安全输出。
总结与最佳实践
| 修饰符 | 作用 | 适用场景 | 示例 |
|---|---|---|---|
e |
转义 HTML 标签,防止 XSS 攻击,输出纯文本。 | 所有用户可输入的内容,如文章标题、内容、评论、留言等。 | [field:titlee/][field:descriptione/] |
| (无) | 直接输出,保留 HTML 标签的原始功能。 | 管理员可控的内容,如首页的公告、指定栏目下的文章详情页等,需要保留格式。 | [field:title/][field:description/] |
核心建议:
- 安全第一:对于任何来自前台用户输入并可能被显示在页面上的数据,强烈建议使用
e修饰符。 - 区分场景:只有在 100% 确定内容是安全的(比如是后台管理员自己编辑的,且不会包含恶意脚本),并且需要保留其 HTML 格式时,才不使用
e。 - 养成习惯:在编写 DedeCMS 模板时,养成为用户生成的内容(如
title,description,content等)加上e的好习惯,可以大大提升网站的安全性。
当你不确定某个变量里会不会有“捣乱”的 HTML 标签时,就给它加上 e,让它老老实实当个文本。
