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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] 怎样解决DV8.3转DZX1.5后,[code]代码解析异常的问题

[复制链接]
mccad 发表于 2010-11-7 21:27:54 | 显示全部楼层 |阅读模式
论坛终于可以顺利转换了,自己改的转换程序,完全可以直接将DV8.3转到DZX1.5上面来。
目前有个问题,改了好几次都解决不好,就是[code]代码的显示问题。
在DV8.3中,帖子基本都是以HTML格式保存的,这样,保存在数据库中的数据均带有HTML格式。
但到了DZ中,帖子均是用UBB方式保存。
而code在解析时,是将\n回车替换为<li>,然后再将与HTML格式冲突的东西做替换后显示出来。
而同样这样的解析,对于本身就是HTML格式时,就出问题。
因为DV的HTML根本就没有\n,而是象<br>或<p>之类的符号代表回车。
所以,显示出来真是乱七八槽。
不知官方有没有办法解决这个问题。
我是想彻底的方法,就是在DV转DZ时,就把所有帖子的HTML格式转换成UBB格式,但这怎么写才能兼容所有的HTML格式。我想官方的程序包中本身应该带有这种转换函数,用于自身显示与数据库间的切换。但我不知道在哪可以找到。
就如这个链接:
http://mccad.net/forum.php?mod=viewthread&tid=72404&extra=page%3D1&page=6
12153556 发表于 2010-11-8 00:05:26 | 显示全部楼层
后台开启HTML,给用户组赋予HTML的权限即可
回复

使用道具 举报

baxter 发表于 2010-11-8 00:08:50 | 显示全部楼层
开启用户组和版块HTML的权限即可
回复

使用道具 举报

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

影响html代码显示的应该是这些代码:
function_discuzcode.php文件中的function discuzcode函数,其中有几句是这样的:
  1.         $htmlon = $htmlon && $allowhtml ? 1 : 0;

  2.         if(!$htmlon) {
  3.                 $message = dhtmlspecialchars($message);
  4.         }
复制代码
但处理[ code]代码的是这样的内容:
  1.     if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[ /code]') || strpos($message, '[ /CODE]')) !== FALSE) {
  2.                 $message = preg_replace("/\s?\[code\](.+?)\[\/code\]\s?/ies", "codedisp('\\1')", $message);
  3.         }
复制代码
  1. function codedisp($code) {
  2.         global $_G;
  3.         $_G['forum_discuzcode']['pcodecount']++;
  4.         $code = dhtmlspecialchars(str_replace('\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)));
  5.         $code = str_replace("\n", "<li>", $code);
  6.         $_G['forum_discuzcode']['codehtml'][$_G['forum_discuzcode']['pcodecount']] = tpl_codedisp($_G['forum_discuzcode'], $code);
  7.         $_G['forum_discuzcode']['codecount']++;
  8.         return "[\tDISCUZ_CODE_".$_G['forum_discuzcode']['pcodecount']."\t]";
  9. }
复制代码
这些代码处理不了之前的HTML留下来的东西。
而楼上各位所说的,应该只是说新的帖子的问题,即新发的帖子是否允许用户或版块去处理HTML代码,而对于旧代码,已经是怎样的,并不是版块的限制说了算,而是已经把这些限制标注在数据库的相应字段时,如post表中的bbcodeoff和htmlon字段。
回复

使用道具 举报

 楼主| mccad 发表于 2010-11-8 10:26:30 | 显示全部楼层
本帖最后由 mccad 于 2010-11-8 10:29 编辑

验证结果,如果代码要产生有行号这样的效果,则帖子不能带有HTML代码格式,而需要全面切换成UBB格式。否则出不了行号。
而且在code代码中,再不能有其它的格式出现。
试试看,象下面的 code代码中,再加上颜色和加粗的格式,最后均不能被解析出来:
  1. abc[b][color=red]d[/color][/b]e
复制代码

回复

使用道具 举报

 楼主| mccad 发表于 2010-11-9 22:27:31 | 显示全部楼层
我自己已经解决了,将带有[code]中帖子内容,均由html格式转换成ubb格式,当然是通过程序来判断并转换。目前转换算是比较满意,内容也基本得到完整保留。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 16:22 , Processed in 0.114713 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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