Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] 旧帖带HTML格式,经编辑后就全部变成明码HTML代码了

[复制链接]
mccad 发表于 2010-11-29 17:11:10 | 显示全部楼层 |阅读模式
我的论坛刚从DV83转换过来DZX1.5。
转换时,所有帖子基本保留了HTML代码,即数据库中的htmlon字段是1。
但由于安全原因,新论坛我设置了用户组的权限,禁止发表HTML代码。
帖子显示是正常的,但如果用户编辑过帖子后,就全部变成了直接显示HTML代码了。

我现在只能开放所有用户的HTML权限,以防止用户重新编辑以前帖子时出现问题。

请官方尽快解决这个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| mccad 发表于 2010-11-29 18:13:47 | 显示全部楼层
BUG版的版主真是不懂,这本身就是BUG,她却说不是BUG。
数据虽然是从其它程序转移过来的,但转移后是正常的,只是不能编辑,而这种现象在DZ本身的数据中也会出现。
可以这样做,设置某个用户组的权限是可编辑HTML,然后了个帖,逞HTML格式的,然后再将用户组设置成不能编辑HTML的,然后让这个用户再去编辑它那个帖,就会出问题。
回复

使用道具 举报

baxter 发表于 2010-11-29 19:23:25 | 显示全部楼层
本帖最后由 baxter 于 2010-11-29 19:23 编辑

回复 mccad 的帖子

转换后可以通过数据库来操作,任何转换都没有100%的
回复

使用道具 举报

 楼主| mccad 发表于 2010-11-29 21:29:02 | 显示全部楼层
我就想做到100%,目前除了这个问题外,其它的转换都是完美的。
问题应该是程序在处理本来是HTML格式的帖子编辑保存时,默认的HTML格式无法使用,而直接将帖子内容保存,而将htmlon字段给取消掉了。
如下图,在编辑时,虽然HTML代码选项被选中,但由于用户组已经设置为不可用HTML代码,所以在保存时,htmlon字段被置为0,而帖子内容却没有做ubb转换。

从程序分析,就是DZ程序本身的问题。问题应该是出在post_editpost.php第505行:
  1.   $htmlon = bindec(($_G['setting']['tagstatus'] && $tagoff ? 1 : 0).($_G['group']['allowhtml'] && !empty($_G['gp_htmlon']) ? 1 : 0));
复制代码
在这一行,重新定义了$htmlon,但随后并没有再对$message进行处理。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

huihui0103 发表于 2010-11-29 23:32:13 | 显示全部楼层
你想的那些都是没用的 给你点提示吧 还是从数据里面动手转换吧
回复

使用道具 举报

 楼主| mccad 发表于 2010-11-30 09:47:08 | 显示全部楼层
本帖最后由 mccad 于 2010-11-30 09:50 编辑

再想想办法
回复

使用道具 举报

 楼主| mccad 发表于 2010-11-30 11:29:58 | 显示全部楼层
而问题应该出在这个JS函数上:
  1. function fetchCheckbox(cbn) {
  2.         return $(cbn) && $(cbn).checked == true ? 1 : 0;
  3. }
复制代码
当无HTML权限的用户,编辑原来带HTML格式的帖子时,htmlon选项框是这样的内容:
<input type="checkbox" name="htmlon" id="htmlon" class="pc" value="0" checked="checked" disabled="disabled" /><label for="htmlon">使用HTML</label>

$(htmlon)只是判断这个ID是否存在,不能取得其值,所以,只要这个ID存在,它就是1。
而$(htmlon).checked 被选中时,它的值也会是1。
所以最终返回的值还是1,而不是0。

通过以上分析。虽然在checkbox中,设置htmlon的值为0,但没用,在JS判断中,并无法取得这个值,只要是选中状态,$message就会按照选中的方式处理内容。
在通过JS处理完$message内容后,才会将内容传递回post_editpost.php中的后半段,即submitcheck('editsubmit')时进行处理。
在进行PHP中处理时,$htmlon值会按照用户组的权限重新赋值,而$message并没有按照这个权限重新进行格式化处理。
最后才造成了程序保留帖子后,$htmlon值丢失,而重新显示帖子时,因为没有$htmlon值,让HTML代码全部显示为明码。

要解决这个问题,需要处理在前面,就通过判断用户组权限,将 htmlon的checkbox框中的 checked="checked" 值去掉,而最终让fetchCheckbox("htmlon")的值为0,则可以解决这个问题。

当然,这只是看程序后的估计,等确证了再说。
回复

使用道具 举报

12153556 发表于 2010-11-30 12:25:22 | 显示全部楼层
呵呵

发现楼主一直都是在自问自答........

有意思~!
回复

使用道具 举报

onpower 发表于 2010-12-6 22:09:36 | 显示全部楼层
顶楼主,官方人员太不负责任了。。。然道要求个100%的完美转换就那么难???
回复

使用道具 举报

 楼主| mccad 发表于 2010-12-15 22:36:18 | 显示全部楼层
本帖最后由 mccad 于 2010-12-15 22:37 编辑

官方既然认为不是BUG,但我肯定这就是BUG。
自己解决如下:
找到\source\include\post\post_editpost.php文件
其中有一行(约72行):
$htmloncheck = $postinfo['htmlon'] & 1 ? 'checked="checked"' : '';
试改成:
        $htmloncheck = $postinfo['htmlon'] & 1 && $_G['group']['allowhtml']? 'checked="checked"' : '';

也即针对用户组的HTML权限加入判断,以实现对HTML代码复选框的控制。
本修改针对X1.5。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-10-2 10:35 , Processed in 0.112983 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表