找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 2478|回复: 0

Diacuz cutstr 函数 根据中文长度裁剪字符串

[复制链接]

498

主题

18

回帖

5

广播

论坛版主

积分
257
泰拉
22
水晶
1
铜钥匙
0
银钥匙
0
金钥匙
0

【江湖新秀】【宝剑回鞘】【泰拉达人】【奥运选手】

发表于 2020-10-26 22:41:05 | 显示全部楼层 |阅读模式

  1. /**
  2. * 根据中文裁减字符串
  3. * @param $string - 字符串
  4. * @param $length - 长度
  5. * @param $doc - 缩略后缀
  6. * @return 返回带省略号被裁减好的字符串
  7. */

  8. function cutstr($string, $length, $dot = ' ...') {
  9.         if(strlen($string) <= $length) {
  10.                 return $string;
  11.         }

  12.         $pre = chr(1);
  13.         $end = chr(1);
  14.         $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), $string);

  15.         $strcut = '';
  16.         if(strtolower(CHARSET) == 'utf-8') {

  17.                 $n = $tn = $noc = 0;
  18.                 while($n < strlen($string)) {

  19.                         $t = ord($string[$n]);
  20.                         if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  21.                                 $tn = 1; $n++; $noc++;
  22.                         } elseif(194 <= $t && $t <= 223) {
  23.                                 $tn = 2; $n += 2; $noc += 2;
  24.                         } elseif(224 <= $t && $t <= 239) {
  25.                                 $tn = 3; $n += 3; $noc += 2;
  26.                         } elseif(240 <= $t && $t <= 247) {
  27.                                 $tn = 4; $n += 4; $noc += 2;
  28.                         } elseif(248 <= $t && $t <= 251) {
  29.                                 $tn = 5; $n += 5; $noc += 2;
  30.                         } elseif($t == 252 || $t == 253) {
  31.                                 $tn = 6; $n += 6; $noc += 2;
  32.                         } else {
  33.                                 $n++;
  34.                         }

  35.                         if($noc >= $length) {
  36.                                 break;
  37.                         }

  38.                 }
  39.                 if($noc > $length) {
  40.                         $n -= $tn;
  41.                 }

  42.                 $strcut = substr($string, 0, $n);

  43.         } else {
  44.                 $_length = $length - 1;
  45.                 for($i = 0; $i < $length; $i++) {
  46.                         if(ord($string[$i]) <= 127) {
  47.                                 $strcut .= $string[$i];
  48.                         } else if($i < $_length) {
  49.                                 $strcut .= $string[$i].$string[++$i];
  50.                         }
  51.                 }
  52.         }

  53.         $strcut = str_replace(array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);

  54.         $pos = strrpos($strcut, chr(1));
  55.         if($pos !== false) {
  56.                 $strcut = substr($strcut,0,$pos);
  57.         }
  58.         return $strcut.$dot;
  59. }
复制代码
[发帖际遇]: 君山 捡了钱没交公 泰拉 降了 10 . 幸运榜 / 衰神榜
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-5-3 04:03 , Processed in 0.114246 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表