dz发帖html模式,discuz二次开发调用编辑器发帖显示html何解?

本文详细解析了Discuz论坛中如何通过bbcode编码提升安全性,展示了HTML到bbcode的转换过程,以及如何在前端和PHP处理函数中进行编码转换。重点介绍了编辑器设置和代码使用策略,包括纯文本模式和高级模式的选择,以及用户组权限对功能的影响。
摘要由CSDN通过智能技术生成

discuz的开发文档很少,在二次开发的时候用discuz的编辑器,显示的是html代码,查看源码和各种莫名其妙的问题着实令人摸不着头脑。而discuz帖子存储在数据库的却是自定义的bbcode而不是正常的html代码。这也就导致直接调用discuz的编辑器发帖显示出来的帖子成了html源码。

网上找了很久也没找到相应的问题,最后通过数据库的字段对比才知道问题的所在。

1、问题所在

调用编辑器编辑的源码

顶顶顶顶顶的顶顶顶顶顶顶顶顶顶的的112816z1znnm01wmozpvgb.png

而默认发帖的源码为

顶顶顶顶顶[b][i][u]的顶顶顶顶顶[/u][/i][/b]顶顶顶顶的的[url=data/attachment/album/201507/22/112816z1znnm01wmozpvgb.png][img]data/attachment/album/201507/22/112816z1znnm01wmozpvgb.png[/img][/url]

于是网上找了一通,最后才知道这是discuz的特色。对html代码进行了特殊的处理,其采用了bbcode的方式进行二次编码,显示帖子的时候再将bbcode编码转换成正常的html代码。discuz这么做的目的也显而易见,最终是为了提高整个应用的安全性。

2、提交前对html进行bbcode编码

static/js/bbcode.js中的html2bbcode可以讲正常的html编码转换成discuz自定义的bbcode编码

最后在./static\image\editor\editor_function.js中的edit_save()找到了获取编辑器内容,并设置编码

var p = window.frames['uchome-ifrHtmlEditor'];

var obj = p.window.frames['HtmlEditor'];

var status = p.document.getElementById('uchome-editstatus').value;

$('uchome-ttHtmlEditor').value = p.document.getElementById('sourceEditor').value;

3、完整的调用方式

var fid = {$_G['fid']};//插件所在版块ID

var textobj = $('uchome-ttHtmlEditor');

var wysiwyg = (BROWSER.ie || BROWSER.firefox || (BROWSER.opera >= 9)) && parseInt('1') == 1 ? 1 : 0;

var allowswitcheditor = parseInt('1');

var allowhtml = parseInt('0');

var allowsmilies = parseInt('1');

var allowbbcode = parseInt('1');

var allowimgcode = parseInt('1');

var simplodemode = parseInt('0');

var fontoptions = new Array("宋体", "新宋体", "黑体", "微软雅黑", "Arial", "Verdana", "Mingliu", "Helvetica", "Trebuchet MS", "Tahoma", "Impact", "Times New Roman", "仿宋,仿宋_GB2312", "楷体,楷体_GB2312");

var smcols = 8;

var custombbcodes = new Array();

function validate(obj) {

var mcpp = window.frames['uchome-ifrHtmlEditor'];

var mcpobj = mcpp.window.frames['HtmlEditor'];

edit_save();

jQuery("#message").val(html2bbcode(mcpobj.document.body.innerHTML));

window.onbeforeunload = null;

obj.form.submit();

return false;

}

其中jQuery("#message").val(html2bbcode(mcpobj.document.body.innerHTML));是将html转成bbcode。

4、这里只是web前端进行了bbcode的编码。然而如果有需要也可以在php处理函数中进行bbcode的转换

$str = "的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶的的";

//html转成bbcode

require_once libfile('function/editor');

echo html2bbcode($str);

echo "";

$str2 = '[b][i]的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶的的[/i][/b]';

//将bbcode转成html

require_once libfile('function/discuzcode');

echo discuzcode($str2, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0);

Discuz x2.5编辑器代码的设置方法

discuz编辑器可以方便的让用户使用Discuz代码,从而把帖子的用户体验做的更好,一个站长必须掌握编辑的基本方法,相对Discuz论坛来说,就是要熟悉Discuz编辑器代码。

为了让新手更容易上手发帖,在后台--界面--编辑设置--全局设置:

4928fbbe49e4f1d9cb6c5c9120949b3e.png

1、默认的编辑器模式:纯文本模式;

2、是否允许切换编辑器模式:是;

3、编辑栏样式:高级。

使用纯文本模式,主要为防止一些新手发帖复制粘贴的问题,过滤掉一些不规范的编辑,让内容看起来更规范。默认使用高级模式也是为了让更多可以使用的功能突显出来,让用户去体验和使用。

编辑器里面的一些功能是通过用户组权限和版块权限来控制,比如音乐、视频、flash的功能,@朋友的功能,隐藏信息的功能,下载远程图片的功能,QQ在线的功能等。

比如:

1、开启音乐、视频、flash的功能,需要在用户组--论坛相关--帖子相关--允许使用 [audio] [media] [flash]

等多媒体代码:选择是;同时版块设置--帖子选项--允许使用 [audio] [media] [flash] 等多媒体代码:选择是;

2、@朋友的功能,隐藏信息的功能,下载远程图片的功能都在用户组权限里面设置,具体可以查看Discuz x2.5 用户组设置策略方法

3、QQ在线的功能:在后台--界面--编辑设置--Discuz代码:QQ勾选可用显示即可,也可以通过详情来编辑不同用户组的使用权限。

c5acd9a549146d655458ac1093ede94e.png

编辑器代码也是可以自己添加的,可以根据后台提示添加自己喜欢的相关的Discuz代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值