zoukankan      html  css  js  c++  java
  • PHP按照视觉长度截取字符串,电商网站标题截取

    由于PHP中utf8编码格式汉字占用3字节,ASCII码值占用1字节,导致切分标题显示效果长短不一,例如

    $titles = [
                '11111,,11111111111111111111111111111111111111111111111111111',
                '저 는 직장 인 입 니 다.저 는 직장 인 입 니 다.저 는 직장 인 입 니 다.',
                'Я из категории работающих. Я из категории работающих. Я из категории работающих. ',
                '33333,,33333333333333333333333333333333333333333333333333333',
                '一二三四五,,六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十',
                '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈',
            ];

    用mb_substr切分也是有视觉差距的:

     foreach ($titles as $title) {
                echo mb_substr($title, 0, 10, 'utf-8') .'...'. PHP_EOL;
            }

    自己编写方法处理,首先把字符串按照字符切分成数组,遍历数组,用ord转换字符获取ASCII编码值,标题显示在html中ASCII值占1字节,汉字占2字节长度,

    小于127则是计算为1字节,否则计算为2字节

    (拆分字符串常用的方法参考:https://www.cnblogs.com/wherein/p/6873489.html

    public function cut_string($title, $length)
        {
            $res = preg_split('//u', $title, null, PREG_SPLIT_NO_EMPTY);
            $byteLength = $length * 2;
            $titleLength = 0;
            $result = '';
            foreach ($res as $item) {
                $result .= $item;
                $titleLength += (ord($item) < 127) ? 1 : 2;
                if ($titleLength >= $byteLength) {
                    $result .= '...';
                    break;
                }
            }
            return $result;
        }
    
    
        public function test()
        {
    
            $titles = [
                '11111,,11111111111111111111111111111111111111111111111111111',
                '저 는 직장 인 입 니 다.저 는 직장 인 입 니 다.저 는 직장 인 입 니 다.',
                'Я из категории работающих. Я из категории работающих. Я из категории работающих. ',
                '33333,,33333333333333333333333333333333333333333333333333333',
                '一二三四五,,六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十',
                '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈',
            ];
    
    //        header('Content-Type: text/html; charset=UTF-8');
            foreach ($titles as $title) {
                echo $this->cut_string($title, 10) . PHP_EOL;
            }
    
            die;
    
    
        }

    看一下效果

  • 相关阅读:
    开源一个适用iOS的数据库表结构更新机制的代码
    耗油是什么??主要起什么作用???_百度知道
    跨平台C++ 功能全面的Socket类库,支持TCP,UDP,限速等等_陈华_新浪博客
    ASICME Avalon|阿瓦隆比特币矿机
    水淀粉_百度百科
    HyperDex.org
    不忘初心:从阿里运维工程师到水果贩子的“降级”路 | 卖水果的工程师
    用Github账号领Ripple币
    简洁 轻快 完美支持 Windows 8 Modern UI 单行输入,轻盈流畅
    赴美旅游签证,不求人!
  • 原文地址:https://www.cnblogs.com/qinwx/p/13948161.html
Copyright © 2011-2022 走看看