Discuz! X3.* 帖子正文排版优化:替换连续多余的空格和标点符号
分类 网站技术/村民张先生 发布于 2015-03-13 11:13
若我们需要在用户浏览页面时自动替换帖子内容中指定中文字符(包括中文标点符号),可以进行以下修改:
打开 source/function/function_discuzcode.php 文件,查找
if(!$bbcodeoff && $allowbbcode) {
在其上方新增以下代码:
$message = mb_convert_encoding($message,'UTF-8','GBK'); //先将帖子内容全部转换为UTF-8编码 $message = trim($message); //去掉头尾空格 $quanjiaokongge = mb_convert_encoding(' ','UTF-8','GBK'); //转换全角空格为UTF-8编码 $juhao = mb_convert_encoding('。','UTF-8','GBK'); //转换中文句号为UTF-8编码 $shenglvehao = mb_convert_encoding('……','UTF-8','GBK'); //转换省略号为UTF-8编码 $douhao = mb_convert_encoding(',','UTF-8','GBK'); //转换中文逗号为UTF-8编码 $message = preg_replace(array('/\r\n[ ]+/', '/\r\n\t+/', '/(\r\n){3,}/', '/[ ]{2,}/', '/('.$juhao.'){3,}/', '/('.$juhao.'){2}/', '/('.$douhao.'){2,}/'), array("\r\n\r\n", "\r\n\r\n", "\r\n\r\n", ' ', $shenglvehao, $juhao, $douhao), mb_eregi_replace($quanjiaokongge," ",$message)); //将全角空格替换为半角空格、当行首存在空格/TAB时删除空格/TAB并增加一个空行(以空行分段,减轻阅读疲劳感)、当连续空行高于2行时调整为空1行、将多个连续空格替换为一个空格、当存在两个连续的中文句号时只保留一个句号、当存在三个以上连续的中文句号时替换为省略号、当存在两个以上连续的中文逗号时只保留一个逗号。 $message = mb_convert_encoding($message,'GBK','UTF-8'); //将替换后的内容转换回GBK编码
若要强制某些版块中的帖子以空行分段(两个自然段间没有空行时自动插入一个空行,减少视觉疲劳,建议在长文章为主的版块中开启),可在以上代码倒数第二行前加入:
if(in_array($_G[fid], array(版块1,版块2))) { $message = mb_eregi_replace('\r\n', "\r\n\r\n", $message); }
你可以根据以上代码自行调整。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截