自己修改DZ的一个计划任务
是自动回帖的的程序,所有测试都基本成功,只有一个出现了问题,编码转换出现了问题,所有内容全部显示都是????(问号)不知道是哪里出了问题~请好心人可以帮助修改下,谢谢了~感激不尽<?phpif(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
$x_u_num=2; //参与随机发贴的人数
$x_t_num=10; //随机回复数量10-50之间任意数字,可以任意修改
$x_t_time=0; //设置回复时间随机变动范围,单位:秒,表示随机发回时间为当前时间至 秒前,设为0表示不启用随机回复时间
$x_r_sign=-1;  //是否启用签名,-1为启用,0为禁用.
$x_r_ubboff=0; //是否启用UBB代码,0为启用,1为禁用.
$x_k_num=0; 
$x_k_act=0;
$x_member=array();
$x_query=DB::query("SELECT uid,username FROM ".DB::table('common_member')." where uid BETWEEN 1 AND 2 limit ".$x_u_num);
while($x_mem=DB::fetch($x_query)){
$x_member[$x_mem['uid']]=addslashes($x_mem['username']);
}
$x_thread=array();$x_query=DB::query("SELECT tid,fid FROM ".DB::table('forum_thread')." where closed=0 and fid in (1,2) order by rand() limit ".$x_t_num);while($x_thr= DB::fetch($x_query)){
$x_thread[$x_thr['tid']]=$x_thr['fid'];
}$x_message=array();
if($x_k_act) $x_keywords=@file("http://www.my3glife.com.cn/keywords.php?charset=".$charset);
if($x_keywords){
$x_message=$x_keywords;
}else{
//自设回复内容在这里添加,支持UBB代码
$x_message[]="怎么就没人拜我为偶像那?? ~ ";
$x_message[]="顶你一下,好贴要顶!";
//在这行之前添加自设回复内容


$x_message=array_map("toCharset",$x_message);
}foreach($x_thread as $x_tid=>$x_fid){
$message=NULL;
if($x_k_num>1){
foreach(array_rand($x_message,$x_k_num) as $num){
$message.=addslashes($x_message[$num]);
}
}else{
$message=addslashes($x_message[array_rand($x_message)]);
}
$timestamp=time()-rand(0,$x_t_time);
$x_uid=array_rand($x_member);
$x_user=$x_member[$x_uid];
$subject=NULL;
$x_useip="203.".rand(96,184).".".rand(124,127).".".rand(9,200); DB::query("INSERT INTO ".DB::table('forum_post')." (fid, tid, first, author, authorid, subject, dateline, message, useip, invisible, anonymous, usesig, htmlon, bbcodeoff, smileyoff, parseurloff, attachment,rate,ratetimes,status,tags,comment)VALUES ('$x_fid', '$x_tid', '0', '$x_user', '$x_uid', '$subject', '$timestamp', '$message', '$x_useip', 0, 0, '$x_r_sign', 0, '$x_r_ubboff', -1, 0, 0, 0, 0, 0, 0, 0)");
$pid = DB::insert_id();

$x_query=DB::query("SELECT tid,subject FROM ".DB::table('forum_thread')." where tid='$x_tid'");
$thread=DB::fetch($x_query);
$lastpost = "$thread[tid]\t".addslashes($thread['subject'])."\t$timestamp\t$x_user";


DB::query("UPDATE ".DB::table('forum_forum')." SET posts=posts+1,todayposts=todayposts+1,lastpost='$lastpost' WHERE fid='$x_fid'", 'UNBUFFERED');

DB::query("UPDATE ".DB::table('forum_thread')." SET replies=replies+1,views=views+1,lastposter='$x_user', lastpost='$timestamp' WHERE tid='$x_tid'", 'UNBUFFERED');
}function toCharset($str=''){
global $charset;
$x_charset="gb2312";//插件文件本身所使用的字符编码,一般不需要修改,可选 'gbk', 'big5', 'utf-8','gb2312'
if(function_exists("mb_convert_encoding")){
return mb_convert_encoding($str,$charset,$x_charset);
}elseif(function_exists("iconv")){
return iconv($x_charset,$charset,$str);
}else{
return $str;
}
}?>

解决方案 »

  1.   

     $x_charset="gb2312";确定你的程序、模板、数据库,都与此编码一致吗。
      

  2.   

        //自设回复内容在这里添加,支持UBB代码
    $x_message[]="怎么就没人拜我为偶像那?? ~ ";
    $x_message[]="顶你一下,好贴要顶!";你的中文是直接写在文件里的,要注意你的文件本身的编码,是否和http返回头设置的编码一致,否则客户端接收到的报文就是乱码的。
      

  3.   

    编码设置问题,添加一句就可以:
    mysql_query("set names utf-8");
      

  4.   

    确定你这个文件和 dz 是一致的。
    或者用这个函数来转码吧。iconv("UTF-8","GB2312//IGNORE",urldecode($kwd));