业务经理

微信扫描以上二维码

028-61286886

技术咨询

自动截取英文完整长度

迅睿框架 更新 2022-07-04 22:57:54 PHP学生

除了dr_strcut方法可以截取,适用于中文,有其它方法是自动识别中英文来截取完成的长度吗?

方案

  • 小波工作室--标签和 #1 · 2022-07-04 22:46:23
    满意答案
    config/custom.php加上我这个函数,用我的函数
    if (!function_exists('dr_en_strcut')) {
        function dr_en_strcut($str, $limit = '100', $dot = '...') {
            if (!$str) {
                return '';
            }
            $start = 0;
            if ($limit && strpos((string)$limit, ',')) {
                list($start, $length) = explode(',', $limit);
                $length = (int)$length;
            } else {
                $length = (int)$limit;
            }
            if (strlen($str) <= $length || !$length) {
                return $str;
            }
            $res = substr($str, $start, $length);
            $strlen = strlen($str);
            if ($start >= 0) {
                $next_start = $start + $length;
                $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
                $next_segm = substr($str, $next_start, $next_len);
                $prev_start = $start - 6 > 0 ? $start - 6 : 0;
                $prev_segm = substr($str, $prev_start, $start - $prev_start);
            }  else {
                $next_start = $strlen + $start + $length;
                $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
                $next_segm = substr($str, $next_start, $next_len);
                $start = $strlen + $start;
                $prev_start = $start - 6 > 0 ? $start - 6 : 0;
                $prev_segm = substr($str, $prev_start, $start - $prev_start);
            }
            if (preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@', $next_segm, $bytes)) {
                if (!empty($bytes[1])) {
                    $bytes = $bytes[1];
                    $res .= $bytes;
                }
            }
            $ord0 = ord($res[0]);
            if (128 <= $ord0 && 191 >= $ord0) {
                if (preg_match('@[xC0-xFD][x80-xBF]{0,5}$@', $prev_segm, $bytes)) {
                    if (!empty($bytes[0])) {
                        $bytes = $bytes[0];
                        $res = $bytes . $res;
                    }
                }
            }
            if (strlen($res) < $strlen) {
                $res = $res . $dot;
            }
            return $res;
        }
    }
  • PHP学生 #2 · 2022-07-04 22:57:54
    @小波工作室--标签和:完美解决英文,希望官方借鉴下解决中英文的,只用一个方法,应该是编码问题

迅睿系统漏洞

外贸多语言建站
外贸多语言建站(2026-10-30)
修正对百度编辑器提取支持
AI文章生成器
AI文章生成器(2026-10-29)
任务插图设置数量
Bing站长数据
Bing站长数据(2026-10-29)
根据BING接口调整菜单 各个页面数据支持点击查看详情
按字段付费
按字段付费(2026-10-29)
按字段付费用于模块的字段设置一定的价格,当用户购买了此内容的字段时才...
泛解析站群系统
泛解析站群系统(2026-10-29)
AI队列增加清空按钮 表单提示语收敛 目录模式不接管主域名模板
账号注销
账号注销(2026-10-29)
用于用户中心的注销账号申请,后台审核通过后注销此账号。后台统一管理注...
邮件群发
邮件群发(2026-10-28)
修改模板的命名
自定义收款/捐款
自定义收款/捐款(2026-10-28)
自定义收款或捐款插件可以让用户快速创建付款或者捐款功能
CMS内容批量修改
CMS内容批量修改(2026-10-28)
后台批量修改文章内容的指定字段在插件后台可以任意指定字段
全站模块搜索
全站模块搜索(2026-10-28)
实现全模块一次性搜索内容,一键搜索全站内容精准搜索全部模块: