找回密码
 立即注册

QQ登录

只需一步,快速开始

Discuz!3.2 标题字数80字限制判断错误解决方案之一


找到并打开/source/function/function_core.php,寻找到827行:
  1. function dstrlen($str) {
  2.         if(strtolower(CHARSET) != 'utf-8') {
  3.                 return strlen($str);
  4.         }
  5.         $count = 0;
  6.         for($i = 0; $i < strlen($str); $i++){
  7.                 $value = ord($str[$i]);
  8.                 if($value > 127) {
  9.                         $count++;
  10.                         if($value >= 192 && $value <= 223) $i++;
  11.                         elseif($value >= 224 && $value <= 239) $i = $i + 2;
  12.                         elseif($value >= 240 && $value <= 247) $i = $i + 3;
  13.                 }
  14.                 $count++;
  15.         }
  16.         return $count;
  17. }
复制代码

写这个函数的,你在我注明红色的地方加了$count++;是几个意思啊,表示非常汗,其实这个函数写的很好了,都已经解决问题了,就因为你老人家加了这个,全部功能失效。大家把这个去掉,就修改好了PHP部分了。
修改成以下:
  1. function dstrlen($str) {
  2.         if(strtolower(CHARSET) != 'utf-8') {
  3.                 return strlen($str);
  4.         }
  5.         $count = 0;
  6.         for($i = 0; $i < strlen($str); $i++){
  7.                 $value = ord($str[$i]);
  8.                 if($value > 127) {
  9.                         if($value >= 192 && $value <= 223) $i++;
  10.                         elseif($value >= 224 && $value <= 239) $i = $i + 2;
  11.                         elseif($value >= 240 && $value <= 247) $i = $i + 3;
  12.                 }
  13.                 $count++;
  14.         }
  15.         return $count;
  16. }
复制代码




接下来是Javascript部分修改,让浏览器判断正确的标题字数。
找到并打开/static/js/common.js,找到112行:
  1. function mb_strlen(str) {
  2.         var len = 0;
  3.         for(var i = 0; i < str.length; i++) {
  4.                 len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
  5.         }
  6.         return len;
  7. }
复制代码

修改成:
  1. function mb_strlen(str) {
  2.         var len = 0;
  3.         var strValue = '';
  4.         for(var i = 0; i < str.length; i++) {
  5.                 strValue = str.charCodeAt(i);
  6.                 if(strValue > 127) {
  7.                         if(strValue >= 192 && strValue <= 223) i++;
  8.                         else if(strValue >= 224 && strValue <= 239) i = i + 2;
  9.                         else if(strValue >= 240 && strValue <= 247) i = i + 3;
  10.                 }
  11.                 len++;
  12.         }
  13.         return len;
  14. }
复制代码




继续找到127行:
  1. function mb_cutstr(str, maxlen, dot) {
  2.         var len = 0;
  3.         var ret = '';
  4.         var dot = !dot ? '...' : dot;
  5.         maxlen = maxlen - dot.length;
  6.         for(var i = 0; i < str.length; i++) {
  7.                 len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
  8.                 if(len > maxlen) {
  9.                         ret += dot;
  10.                         break;
  11.                 }
  12.                 ret += str.substr(i, 1);
  13.         }
  14.         return ret;
  15. }
复制代码

修改成:
  1. function mb_cutstr(str, maxlen, dot) {
  2.         var len = 0;
  3.         var ret = '';
  4.         var dot = !dot ? '...' : dot;
  5.         var strValue = '';
  6.         maxlen = maxlen - dot.length;
  7.         for(var i = 0; i < str.length; i++) {
  8.                 strValue = str.charCodeAt(i);
  9.                 if(strValue > 127) {
  10.                         if(strValue >= 192 && strValue <= 223) i++;
  11.                         else if(strValue >= 224 && strValue <= 239) i = i + 2;
  12.                         else if(strValue >= 240 && strValue <= 247) i = i + 3;
  13.             }
  14.             len++;
  15.                 if(len > maxlen) {
  16.                         ret += dot;
  17.                         break;
  18.                 }
  19.                 ret += str.substr(i, 1);
  20.         }
  21.         return ret;
  22. }
复制代码




继续找到1756行:
  1. function strLenCalc(obj, checklen, maxlen) {
  2.         var v = obj.value, charlen = 0, maxlen = !maxlen ? 200 : maxlen, curlen = maxlen, len = strlen(v);
  3.         for(var i = 0; i < v.length; i++) {
  4.                 if(v.charCodeAt(i) < 0 || v.charCodeAt(i) > 255) {
  5.                         curlen -= charset == 'utf-8' ? 2 : 1;
  6.                 }
  7.         }
  8.         if(curlen >= len) {
  9.                 $(checklen).innerHTML = curlen - len;
  10.         } else {
  11.                 obj.value = mb_cutstr(v, maxlen, 0);
  12.         }
  13. }
复制代码

修改成:
  1. function strLenCalc(obj, checklen, maxlen) {
  2.         var v = obj.value, charlen = 0, maxlen = !maxlen ? 200 : maxlen, curlen = 0, strValue = '';
  3.         for(var i = 0; i < v.length; i++) {
  4.                 strValue = v.charCodeAt(i);
  5.                 if(strValue > 127) {
  6.                         if(strValue >= 192 && strValue <= 223) i++;
  7.                         else if(strValue >= 224 && strValue <= 239) i = i + 2;
  8.                         else if(strValue >= 240 && strValue <= 247) i = i + 3;
  9.                 }
  10.                 curlen++;
  11.         }
  12.         if(maxlen >= curlen) {
  13.                 $(checklen).innerHTML = maxlen - curlen;
  14.         } else {
  15.                 obj.value = mb_cutstr(v, maxlen, 0);
  16.         }
  17. }
复制代码




如果开启了门户的话,找到并打开/static/js/portal.js,找到329行按照上面修改最后一部分的function strLenCalc修改就好了

本教程由无限星辰工作室CRX349独家整理和提供,转载请注明地址,谢谢。本文地址:https://www.xmspace.net/thread-271-1-1.html
无限星辰工作室  好集导航 Discuz全集下载  星辰站长网  集热爱361  一品文学  手机小游戏合集   海外空间网 星辰api  星辰支付二维码管理平台 阿里云服务器 腾讯云服务器
服务Discuz!建站|DiscuzQ配置|二开|小程序|APP|搬家|挂马清理|防护|Win/Linux环境搭建|优化|运维|
服务理念:专业 诚信 友好QQ842062626 服务项目 Q群315524225

发表于 2014-10-31 23:59:29 | 显示全部楼层 |阅读模式

回复 | 使用道具 举报

该帖共收到 0 条回复!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

美图秀

    • fastadmin 后台界面使用字段数组类型
    • Discuz!x3.5 修改标题高亮颜色
    • Discuz!x3.5 应用中心 下载应用一直下载中
    • 帖子定时显示
    • 论坛辅助审核
拖动客服框
Online Service
点击这里给我发消息
点击这里联系我们
微信扫一扫
在线客服
快速回复 返回顶部 返回列表