返回列表 发帖
查看: 108|回复: 5

JavaScript 修复Discuz!X3.5不能Ctrl+V粘贴图片的问题

33

主题

102

回帖

151

积分

渐入佳境

贡献
1 点
金币
5 个
发表于 前天 19:28 | 查看全部 |阅读模式
先说原因:如果在Discuz!X3.5的编辑框里面粘贴图片,那么图片会被保存为Base64(data:image/png;base64开头的链接)
但是,Discuz!X3.5在处理的时候会在这个链接的前面加一个HTTP的前缀,像这样:
<img id="aimg_t6Wvt" class="zoom" src="http://data:image/png;base64,图片BASE64" border="0" alt="">

解决办法:

我们只需要通过JavaScript去掉这个HTTP前缀即可
[mw_shl_code=javascript,true]function fixDataUrlImages() {
    // 获取页面中所有的IMG元素
    const images = document.getElementsByTagName('img');
   
    for (let i = 0; i < images.length; i++) {
        const img = images;
        const src = img.getAttribute('src');
        
        // 检查是否是错误格式的data URL
        if (src && src.includes('http://data:image') || src.includes('https://data:image')) {
            // 修复data URL格式
            const fixedSrc = src.replace(/https?:\/\/data:/, 'data:');
            img.setAttribute('src', fixedSrc);
            console.log('修复图片URL:', src, '->', fixedSrc);
        }
    }
}

// 页面加载完成后执行修复
document.addEventListener('DOMContentLoaded', function() {
    fixDataUrlImages();
});

// 如果页面是动态加载的,也可以使用MutationObserver监听DOM变化
const observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if (mutation.addedNodes.length) {
            fixDataUrlImages();
        }
    });
});

observer.observe(document.body, {
    childList: true,
    subtree: true
});

// 也可以直接调用修复函数
// fixDataUrlImages();[/mw_shl_code]

使用方法:
把这个JS嵌入Discuz!X3.5的帖子显示页面即可
回复

使用道具 举报

31

主题

6008

回帖

1万

积分

应用开发者

贡献
625 点
金币
1444 个
QQ
发表于 前天 20:33 | 查看全部
不建议,支持将Base64数据存储到数据库,可能引发数据爆炸,危害极大,如果真要支持,应当将Base64数据转换为附件文件进行存储才对
回复 1

使用道具 举报

33

主题

102

回帖

151

积分

渐入佳境

贡献
1 点
金币
5 个
 楼主| 发表于 前天 21:14 | 查看全部
湖中沉 发表于 2025-10-16 20:33
不建议,支持将Base64数据存储到数据库,可能引发数据爆炸,危害极大,如果真要支持,应当将Base64数据转换 ...

那样的话编写Javascript的难度太大了
至少这样能用
回复

使用道具 举报

81

主题

353

回帖

759

积分

管理员

贡献
19 点
金币
41 个
发表于 前天 22:23 | 查看全部
首先,这不是bug,不需要修
再次,应用中心有插件,直接装即可,用户体验还好
最后,欢迎支持正版应用,尊重开发者的辛苦

AD:官网论坛默认就安装了这个插件
你应该直接说:https://addon.dismall.com/plugins/tshuz_copyupload.html 
发表于 昨天 11:50
回复 1

使用道具 举报

31

主题

6008

回帖

1万

积分

应用开发者

贡献
625 点
金币
1444 个
QQ
发表于 昨天 08:10 | 查看全部
73327424 发表于 2025-10-16 21:14
那样的话编写Javascript的难度太大了
至少这样能用

但这样的危害是非常大的,图片base64里可能注入恶意代码不说,数据库储存大量base64的内容,可能造成数据爆炸的危害就是巨大的,眼前可能看不到问题,稍微做大一点点,那后果非常严重。所以说不推荐这样做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2025-10-18 14:55 , Processed in 0.048570 second(s), 12 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表