使用自定义函数 + 正则表达式(推荐,最灵活)
这是最推荐的方法,因为它不修改核心文件,只涉及模板和一个小小的函数文件,升级 DedeCMS 时也不会丢失修改。

(图片来源网络,侵删)
原理:
- 在
/include/extend.func.php文件中添加一个自定义函数,这个函数使用正则表达式来查找文章内容中的<img>标签,并移除其width,height,style等属性,从而还原为原图。 - 在文章页模板中,调用这个新函数来处理
body
操作步骤:
第1步:创建自定义函数
- 打开你的 DedeCMS 根目录,找到并打开文件:
/include/extend.func.php。 - 在文件末尾的
?>之前,添加以下 PHP 代码:
/**
* DedeCMS 文章内容调用原图
* 功能:移除 <img> 标签中的 width, height, style 属性,保留原图
* @param string $body 文章内容
* @return string 处理后的内容
*/
function GetOriginalImg($body)
{
// 清除 style 属性
$body = preg_replace("/style=.+?['|"]/i", '', $body);
// 清除 width 属性
$body = preg_replace("/width=.+?['|"]/i", '', $body);
// 清除 height 属性
$body = preg_replace("/height=.+?['|"]/i", '', $body);
// 替换多余的空格和换行
$body = str_replace(" ", " ", $body);
$body = str_replace("\r\n", "", $body);
$body = str_replace("\n", "", $body);
return $body;
}
第2步:在文章页模板中调用

(图片来源网络,侵删)
- 打开你的文章页模板文件,通常是
/templets/default/article_article.htm(根据你的模板路径可能不同)。 - 找到原来调用文章内容的地方,它可能是这样的:
{dede:field.body/} - 将其修改为调用我们刚刚创建的
GetOriginalImg函数:{dede:field.body function='GetOriginalImg(@me)'/}function='GetOriginalImg(@me)'的意思是:将{dede:field.body/}的值(即@me)作为参数传递给GetOriginalImg函数进行处理。
第3步:更新缓存
保存文件后,登录 DedeCMS 后台,点击 “系统” -> “一键更新网站”,选择“更新所有HTML”或“仅更新文章页”,然后执行更新,这样修改才能生效。
修改 arc.archives.class.php 文件(不推荐,但有特殊用途时可用)
原理:
直接修改 DedeCMS 处理文章内容的底层类文件,让它在调用 body 时就自动返回原图,这种方法虽然直接,但缺点是升级 DedeCMS 后,修改会被覆盖。
操作步骤:

(图片来源网络,侵删)
- 打开文件:
/include/arc.archives.class.php。 - 搜索
GetBody函数(大约在 1200 行左右,不同版本行号可能不同)。 - 找到类似这样的代码:
// 在处理文章内容的循环中,通常会有下面这行代码来处理图片 $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body);这行代码就是将文章中的小图替换为带有样式的缩略图的元凶。
- 修改这行代码,将
style="..."去掉,或者直接注释掉/删除整行替换逻辑。 修改前 (示例):// ... 其他代码 ... if($this->Fields['typeimg'] != '' && $isremote == 2) { $body = str_replace($oldimg, "<img src=\"{$this->Fields['typeimg']}\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body); } else { // 将文章中的图片替换为带样式的缩略图 $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body); } // ... 其他代码 ...修改后 (示例):
// ... 其他代码 ... if($this->Fields['typeimg'] != '' && $isremote == 2) { // 如果你想保留封面图,可以保留这行,但去掉样式 $body = str_replace($oldimg, "<img src=\"{$this->Fields['typeimg']}\" alt=\"{$row['title']}\" />", $body); } else { // 直接注释掉或删除这行,这样就不会用缩略图替换文章内容里的图了,从而保留原图 // $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body); } // ... 其他代码 ...注意: 这种方法比较粗暴,可能会影响其他地方的图片逻辑,请谨慎操作,并提前备份文件。
使用CSS 控制(最简单,但有局限性)
原理: 不修改任何 PHP 代码,只通过 CSS 来强制图片显示为原始尺寸,并限制最大宽度以防止撑破布局。
操作步骤:
- 打开你的文章页模板文件,
/templets/default/article_article.htm。 - 在
<head>标签内找到你的 CSS 文件引入位置,或者在<style>标签内添加以下 CSS 代码:
.entry-content img, /* entry-content 是文章内容的常用class,根据你的模板修改 */
#arcBody img, /* arcBody 是 DedeCMS 默认的文章内容ID */
.dede_content img /* dede_content 是 DedeCMS 默认的文章内容class */
{
/* 移除或覆盖内联的 width 和 height 属性 */
max-width: 100% !important;
height: auto !important;
/* 移除内联的 style 属性 */
style: !important;
/* 可选:添加一些基本样式 */
display: block;
margin: 10px auto;
}
优点:
- 无需修改任何 PHP 文件,安全、简单。
- 升级系统无忧。
缺点:
- 无法真正移除属性:CSS 只是视觉上覆盖了
width和height,但这些属性依然存在于 HTML 中,可能会对某些需要精确图片尺寸的 JavaScript 代码造成影响。 - 对
style属性的处理有限:style: !important;并不能移除整个 style 属性,只是清空了它的值,对于复杂的内联样式可能效果不佳。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 自定义函数 | 灵活、安全、彻底、可升级 | 需要修改函数文件,多一步操作 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| 修改核心类 | 直接修改底层逻辑 | 不安全、升级会失效、易出错 | ⭐ (不推荐,除非你明确知道自己在做什么) |
| CSS 控制 | 最简单、最安全、无侵入性 | 不彻底、有局限性、可能影响JS | ⭐⭐⭐ (适合对样式要求不高,且不想动代码的场景) |
对于绝大多数用户来说,强烈推荐使用方法一,它完美地平衡了功能性、安全性和可维护性,是解决 DedeCMS 调用原图问题的标准方案。
