Discuz 帖子标题长度从 80 字符提升到 200 字符的修改方法

背景

Discuz的标题字数默认是80字,很显然80字在一些情况下可能不太够用,我们来修改一下字数上限,提升至200字。

一、修改前的准备

  • 备份:务必备份数据库和所有即将修改的 PHP、模板、JS 文件。

  • 环境:确保有管理员权限访问 FTP 或服务器文件系统,并能登录数据库(如 phpMyAdmin)。

二、修改PHP文件

第 1 步:修改模板文件 post_editor_extra.htm

  • 路径template/default/forum/post_editor_extra.htm

  • 操作:搜索 80,将提示文字中的 80 改为 200

  • 提示:搜索显示5个第一个不是的把下面的这些四个80改成200即可

    <span><input type="text" name="subject" id="subject" class="px" value="$postinfo[subject]" onkeyup="strLenCalc(this, 'checklen', 200);" style="width: 25em" tabindex="1" /></span>
    			<!--{else}-->
    				<span id="subjecthide" class="z">RE: $thread[subject] [<a href="javascript:;" onclick="display('subjecthide');display('subjectbox');return false;">{lang modify}</a>]</span>
    				<span id="subjectbox" style="display:none"><input type="text" name="subject" id="subject" class="px" value="" onkeyup="strLenCalc(this, 'checklen', 200);" style="width: 25em" /></span>
    			<!--{/if}-->			
    			<span id="subjectchk"{if $_GET[action] == 'reply'} style="display:none"{/if}>{lang comment_message1} <strong id="checklen">200</strong> {lang comment_message2}</span>
    			<script type="text/javascript">strLenCalc($('subject'), 'checklen', 200)</script>

第 2 步:修改模板文件 forumdisplay_fastpost.htm

  • 路径template/default/forum/forumdisplay_fastpost.htm

  • 操作:搜索 80,将提示文字中的 80 改为 200

  • 提示:会搜索出4个,只需要把这里的两个80改成200即可
    <input type="text" id="subject" name="subject" class="px" value="" onkeyup="strLenCalc(this, 'checklen', 200);" tabindex="11" style="width: 25em" />
    				<span>{lang comment_message1} <strong id="checklen">200</strong> {lang comment_message2}</span>

第 3 步:修改语言包文件 lang_message.php

  • 路径source/language/lang_message.php

  • 操作:搜索 80,找到错误提示 '您的标题超过 80 个字符的限制',将 80 改为 200

  • 提示:这里只有一个地方要改搜索post_subject_toolong或者搜索80或者'抱歉,您的标题超过 200 个字符修改标题长度',都可以找到

第 4 步:修改 PHP 验证文件 function_post.php

  • 路径source/function/function_post.php

  • 操作:搜索 dstrlen($subject) > 80,将 80 改为 200

  • 提示:这里只有一个地方要改
    if(dstrlen($subject) > 200) {
    		return 'post_subject_toolong';
    	}

第 5 步:修改 JS 验证文件 forum_post.js

  • 路径static/js/forum_post.js

  • 操作:搜索 mb_strlen(theform.subject.value) > 80,将 80 改为 200;同时将错误提示中的 80 改为 200

  • 提示:这里只有一个地方要更改,把这两个80改成200即可
    else if(mb_strlen(theform.subject.value) > 200) {
    		showError('您的标题超过 200 个字符的限制');
    		return false;
    	}

第 6 步:修改 JS 验证文件 forum.js

  • 路径static/js/forum.js

  • 操作:搜索 mb_strlen(theform.subject.value) > 80,将 80 改为 200;同时将错误提示中的 80 改为 200

  • 提示:这里只有这一个地方需要更改,把这两个80改成200即可,它们在一个地方很好找
    if(theform.message.value == '' || theform.subject.value == '') {
    		s = '抱歉,您尚未输入标题或内容';
    		theform.message.focus();
    	} else if(mb_strlen(theform.subject.value) > 200) {
    		s = '您的标题超过 200 个字符的限制';
    		theform.subject.focus();
    	}

二、修改数据库

数据库字段长度限制是最终的瓶颈。即使 PHP、JS、模板都已修改允许 200 字符,但数据库字段仍为 VARCHAR(80)CHAR(80),超出的标题会被截断或报错。因此,数据库修改必须作为最后一步,在完成所有文件修改后执行

第 7 步:通过 Discuz 后台执行 SQL 语句

1、开启后台 SQL 执行权限

Discuz 默认关闭后台直接执行 SQL 的功能,需要先开启。

通过 FTP 或服务器文件管理器打开 config/config_global.php 文件。

找到以下代码行(通常在文件后半部分):

$_config['admincp']['runquery'] = 0;

0 改为 1

$_config['admincp']['runquery'] = 1;

保存文件。

2、进入后台数据库升级

使用管理员账号登录 Discuz 论坛后台(网址通常为 https://你的域名/admin.php)。

点击顶部菜单 “站长”“数据库”“升级”

如果看不到该菜单项,请检查 config_global.php 修改是否正确,并清除缓存。

3、执行 SQL 语句

在“数据库升级”页面的文本框中输入以下 SQL 语句(注意将 pre_ 替换为你自己的表前缀,如 discuz_bbs_ 等):

①来源各大知名网站的

ALTER TABLE `pre_forum_post` CHANGE `subject` `subject` VARCHAR(200) NOT NULL;
ALTER TABLE `pre_forum_rsscache` CHANGE `subject` `subject` char(200) NOT NULL;
ALTER TABLE `pre_forum_thread` CHANGE `subject` `subject` char(200) NOT NULL;

②来源根据上面的语句AI优化后的

ALTER TABLE `pre_forum_post`    MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';
ALTER TABLE `pre_forum_rsscache` MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';
ALTER TABLE `pre_forum_thread`  MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';

点击“提交”执行。正常情况下会提示 Query OK, xxx rows affected 类似信息。

建议:可逐条执行,以便出现错误时定位。

4、关闭后台 SQL 执行权限(安全建议)

执行完成后,建议将 config/config_global.php 中的 $_config['admincp']['runquery'] 改回 0,防止他人利用后台执行恶意 SQL。

三、清除缓存与验证

清除缓存

所有修改完成后,必须清除 Discuz 缓存:

  • 后台 → 工具 → 更新缓存(全选后提交)

验证测试

  1. 发布新主题,输入一个 100~200 字符的标题。

  2. 检查是否可以成功发布,以及前端是否完整显示标题。

  3. 查看数据库 pre_forum_thread.subject 字段,确认存储长度已超过 80 字符。

四、注意事项

  • 备份数据库:在后台执行 SQL 语句前,强烈建议先通过“工具 → 备份”备份数据库。

  • 旧帖子:数据库字段扩容后,已有帖子标题不会丢失,但原有标题不会超过 80 字符(因之前已被限制)。

  • 其他插件:如果使用了门户(pre_portal_article_title)或第三方插件,请一并检查并修改其独立标题字段。

  • 后台设置:后台“全局 → 用户权限 → 帖子相关 → 标题最大长度”中的数值可能无法直接改为 200,忽略即可,因为代码修改已生效。

  • 字符集VARCHAR(200) 在 UTF-8 下可存储 200 个任意字符(中英文均按一个字符计算)。

本教程已完整包含 6 个文件修改 + 数据库修改,共 7 步。操作顺序为:

步骤 修改内容 文件路径
1 模板提示 template/default/forum/post_editor_extra.htm
2 模板提示 template/default/forum/forumdisplay_fastpost.htm
3 语言包错误提示 source/language/lang_message.php
4 PHP 后端验证 source/function/function_post.php
5 JS 前端验证 static/js/forum_post.js
6 JS 前端验证 static/js/forum.js
7 数据库扩容 通过后台执行 SQL

按照此顺序操作即可安全完成修改。

补充:更改后会显示200字符,不过GBK的标题最长大概是102个汉字,而UTF-8的标题最长大概是70个汉字左右,纯数字或者字母确确实实可以达到200个。

给TA打赏
共{{data.count}}人
人已打赏
技术

给WP的7B2主题增加文章目录功能

2026-6-15 15:10:44

技术

关闭WordPress自动保存文章功能

2026-7-20 17:23:08