在开发响应式或手机端模板时,图片无法自适应的问题经常出现。这主要是因为Dedecms编辑器在上传图片时会自动添加固定的宽度和高度属性,导致图片不能根据设备屏幕大小调整尺寸。为了解决这个问题,我们需要在保存文章时清除这些多余的属性。 首先,可以通过修改内容页的代码来实现这一功能。具体方法是在内容页找到 `{dede:field.body}` 标签,并将其替换为以下代码:

{dede:field.body runphp=yes}
global $cfg_basehost;
$str = @me;
$search = '/(]+>)/is';
$search1 = '/(]+>)/is';
$search2 = '#()#i';
$search3 = '#()#i';
$content = preg_replace($search,'$1$3',$str);
$content = preg_replace($search1,'$1$3',$content);
$content = preg_replace($search2,'$1$2',$content);
$content = preg_replace($search3,'$1$2',$content);
@me = $content;
//@me = str_replace('/uploads/allimg/', $cfg_basehost.'/uploads/allimg/', $content);//手机版图片使用绝对路径
{/dede:field.body}
这段代码的作用是通过正则表达式去除图片标签中的 `width` 和 `height` 属性,以及 `style` 中的相关样式。 然而,有时候这种方法并不能完全过滤掉所有不必要的属性。因此,可以考虑在保存文章时直接处理数据。找到 `/dede/article_add.php` 和 `/dede/article_edit.php` 文件(对应文章模型,其他模型请查找后台相关文件),然后搜索以下代码:

$body = AnalyseHtmlBody($body,$description,$litpic,$keywords,'htmltext');
在这段代码之后添加以下代码:

// 去除img中的style属性
$body = preg_replace("/style=\\\\\\\\\\\\.+?['|\\\\"]/i", '', $body); 

// 去除img中的width,height属性
$exp = Array("/height=.{0,5}\\\\s/i", "/width=.{0,5}\\\\s/i"); 
$exp_o = Array('', '');
$body = preg_replace($exp, $exp_o, $body);
通过这种方式,当发布或修改文档时,系统会自动清除 `body` 内容中的所有 `style` 属性,包括图片的 `width` 和 `height`。这种方法可以让文档更加纯净,避免多余属性对页面布局的影响。 以上两种方法各有优劣,具体选择哪一种可以根据实际需求来决定。如果只需要临时解决个别页面的问题,可以使用第一种方法;如果希望彻底解决所有文档的问题,则推荐使用第二种方法。