最新消息:

discuz用户名包含敏感字符或被系统屏蔽以及如何注册中文长用户名

未分类 林夕 7587浏览

最近这几天在折腾火车采集软件,想采集天涯论坛一个有232个分页的帖子,发现有一些用户名采集后不能添加到本地论坛,在后台添加也提示“用户名包含敏感字符或被系统屏蔽”,修改了/uc_client/model/user.php和/uc_server/model/user.php文件中(第44行)及修改数据库用户名长度值后,后台能够添加了,但是在火车采集中还是不添加到本地论坛,那应该就是前台注册页面拒绝了,按照下面的方法全面诊断后,在前台页面注册8个中文字的用户名时,能够打一个绿色的对勾了,证明已经可以注册中文长用户名了。方法如下:

1、在网站/source/class/目录下的class_member.php文件中(第574-580行), 找到如下代码:

			if(!$activation) {
$usernamelen = dstrlen($username);
if($usernamelen < 3) {
showmessage('profile_username_tooshort');
} elseif($usernamelen > 15) {
showmessage('profile_username_toolong');
}

其中的数值“15”为注册用户名长度的最大值,数值“3”为注册用户名长度的最小值。将这两个值改成你需要的数值即可,例如我的网站需要将注册用户名长度的最大值增大至90,以下均以此为例。你根据你的需要确定字符长度,一般20或者30即可。

2、在网站/source/language/目录下的lang_message.php文件中(第230行),把数字15修改为你需要的数字,找到如下代码:

  'profile_username_toolong' => '抱歉,您的用户名超过 15 个字符,请输入一个较短的用户名',

这个是提示,不涉及判断。

3、在网站/source/language/member/目录下的lang_template.php文件中(第52行),修改数字15为你需要的数字,找到如下代码:

  'register_username_tips' => '用户名由 3 到 15 个字符组成',

这个是提示,不涉及判断。

4、在网站/source/language/mobile/目录下的lang_template.php文件中(第95、136行),修改数字15为你需要的数字,找到如下代码:

  'reg_username' => '用户名必须为大于3位小于15位',
'registerinputtip' => '用户名:3-15位',

这个是提示,不涉及判断。

5、在网站/template/default/member目录下的register.htm文件中(第125行),修改数字15为你需要的数字,找到如下代码:

										<td><input type="text" id="{$this->setting['reginput']

['username']}" name="" class="px" tabindex="1" value="{echo dhtmlspecialchars($_GET[defaultusername])}" autocomplete="off" size="25"

maxlength="15" required /></td>

6、在dz /uc_client/model/user.php和/uc_server/model/user.php文件中(第44行),修改数字15为你需要的数字,找到如下代码:

		if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {

以下是在前台注册会出现的提示,不改也可以注册,强迫症患者请继续:

7、在网站/data/template目录下的1_1_member_register.tpl.php文件(114行),修改数字15为你需要的数字,找到如下代码:

<td class="tipcol"><i id="tip_<?php echo $this->setting['reginput']['username'];?>" class="p_tip">用户名由 3 到 15 个字符组成</i><kbd 

id="chk_<?php echo $this->setting['reginput']['username'];?>" class="p_chk"></kbd></td>

这个不改其实也可以注册,只是在注册的时候看起来不舒服罢了。

8、在网站/static/js目录下的register.js文件中(第281-284行),修改数字15为你需要的数字,找到如下代码:

	if(unlen < 3 || unlen > 15) {
errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 15 个字符');
return;
}

这个不改其实也可以注册,只是在注册的时候它会判断你的输入,如果超过15个英文字符(或者超过8个中文),会提示“用户名不得超过 15 个字符”,不改的话可以注册。

9、在网站/source/module/forum目录下的forum_ajax.php文件中(第22行),修改数字15为你需要的数字,找到如下代码:

	} elseif($usernamelen > 15) {

前面我已经改成了90个字符,我注册一个8中文字符的用户名,它也会提示“抱歉,您的用户名超过 90 个字符,请输入一个较短的用户名”,这不是神经病嘛,只好把这个也改一下。
它这个判断是15,超过15则返回/source/language/目录下的lang_message.php文件中(第230行)的提示。改好之后注册用户名时会打一个对勾表示正常了。

10、在网站/source/plugin/wechat目录下的wechat.class.php文件中(第241行),修改数字15为你需要的数字,找到如下代码:

		if($usernamelen > 15) {

这个不改的时候,我在注册页面已经看到没出错了,但是我记录一下。也改了。

总结:

第6条,在dz /uc_client/model/user.php和/uc_server/model/user.php文件中(第44行),改好后,并把数据库中字符长度改好后,在后台就可以添加长用户名了。

第1条,/source/class/目录下的class_member.php文件中(第574-580行),
第5条,/template/default/member目录下的register.htm文件中(第125行)
控制前台能否注册长用户名,这个不改,不能注册。

第9条判断后返回第2条的提示。第3、4、7条是提示,不涉及判断。第8条自判自答。

修改完代码程序,我们的工作才完成一半。接下来需要修改数据库了,这得非常小心,如果数据库中已有数据就需要更加小心处理了。

首先,修改UCenter库表pre_ucenter(pre_为自定义前缀,下同):

pre_admins:username[char(50)]

pre_feeds:username[varchar(50)]

pre_members:username[char(50)]

pre_mergemembers:username[char(50)]

pre_protectedmembers:username[char(50)]

然后,修改Discuz!X库表pre_ultrax:

pre_common_adminnote:admin[varchar(50)]

pre_common_banned:admin[varchar(50)]

pre_common_card_log:username[varchar(50)]

pre_common_diy_data:username[varchar(50)]

pre_common_failedlogin:username[char(50)]

pre_common_grouppm:author[varchar(50)]

pre_common_invite:fusername[varchar(50)]

pre_common_member:username[char(50)]

pre_common_member_validate:admin[varchar(50)]

pre_common_member_verify_info:username[varchar(50)]

pre_common_mytask:username[char(50)]

pre_common_report:username[varchar(50)],opname[varchar(50)]

pre_common_session:username[char(50)]

pre_common_word:admin[varchar(50)]

pre_forum_announcement:author[varchar(50)]

pre_forum_forumrecommend:author[varchar(50)]

pre_forum_groupuser:username[char(50)]

pre_forum_order:admin[varchar(50)]

pre_forum_pollvoter:username[char(50)]

pre_forum_promotion:username[char(50)]

pre_forum_post:author[varchar(50)]

pre_forum_postcomment:author[varchar(50)]

pre_forum_ratelog:username[char(50)]

pre_forum_rsscache:author[varchar(50)]

pre_forum_thread:author[varchar(50)]

pre_forum_threadmod:username[char(50)]

pre_forum_trade:seller[varchar(50)]

pre_forum_tradecomment:rater[varchar(50)]

pre_forum_tradelog:seller[varchar(50)],buyer[varchar(50)]

pre_forum_warning:operator[varchar(50)],author[varchar(50)]

pre_home_album:username[varchar(50)]

pre_home_blog:username[varchar(50)]

pre_home_clickuser:username[varchar(50)]

pre_home_comment:author[varchar(50)]

pre_home_docomment:username[varchar(50)]

pre_home_doing:username[varchar(50)]

pre_home_feed:username[varchar(50)]

pre_home_feed_app:username[varchar(50)]

pre_home_friend:fusername[varchar(50)]

pre_home_friend_request:fusername[char(50)]

pre_home_notification:author[varchar(50)]

pre_home_pic:username[varchar(50)]

pre_home_poke:fromusername[varchar(50)]

pre_home_share:username[varchar(50)]

pre_home_show:username[varchar(50)]

pre_home_specialuser:username[varchar(50)],opusername[varchar(50)]

pre_home_visitor:vusername[varchar(50)]

pre_myrepeats:username[varchar(50)]

pre_portal_rsscache:author[varchar(50)]

pre_portal_topic_pic:username[varchar(50)]

转载请注明:一秒钟的梦 » discuz用户名包含敏感字符或被系统屏蔽以及如何注册中文长用户名