• 技术文章 >后端开发 >php教程

    php截取中英文字符串操作

    巴扎黑巴扎黑2016-11-22 10:43:08原创480
    今天遇到一个这样的问题。想必大家都遇到过,因为排版需要,如果用户名如果过长的话,将做截取操作,显示为... 。 我们的需求类似sina 微博,如果是中文的话,最多显示5位,如果超过5位则显示4个中文,三个... ,大家都知道,排版时一个中文占两个英文的位置。所以要最多显示10位,类推上面的来的。

    在网上找到的解决办法不是很好,我自己写了一个。我把它们放到helper里面了。不说思路了,直接上代码吧。

    <?php
    class Zend_View_Helper_UserName
    {
        public function userName($userName, $length)
        {
            $retUserName = '';
            $position = 0;
            $count = 1;
            while ($count <= $length) {
                $subStr = mb_substr($userName, $position, 1, 'UTF-8');
                if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $subStr)) {
                    $count += 2;
                } else {
                    $count++;
                }
                $position++;
                $retUserName .= $subStr;
            }
            $retUserNameLength  = mb_strlen($retUserName);
            $userNameLength = mb_strlen($userName) ;
            if ($retUserNameLength >= $userNameLength - 1 && $retUserNameLength <= $userNameLength) {
                $retUserName = $userName;
            } else {
                $retUserName .= '...';
            }
            return $retUserName;
        }
    }

    这样用的时候就可以轻松的对名字截取了。而且对中英文都合适。弊端是可能会比substr之类的函数消耗一些资源。

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:php错误报告 下一篇:php数据库安全——设计、连接和加密
    大前端线上培训班

    相关文章推荐

    • PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• 带你分清类中的构造函数与析构函数• 五分钟带你了解PHP中的魔术方法(实例详解)• 怎样去搞定PHP类的继承?(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网