>  기사  >  백엔드 개발  >  중국어 및 영어 문자열 작업의 PHP 가로채기

중국어 및 영어 문자열 작업의 PHP 가로채기

巴扎黑
巴扎黑원래의
2016-11-22 10:43:081180검색

오늘 이런 문제가 발생했습니다. 조판 요구 사항으로 인해 사용자 이름이 너무 길면 가로채서 다음과 같이 표시됩니다. 우리의 요구사항은 시나 웨이보와 비슷합니다. 중국어라면 최대 5자리까지 표시할 수 있고, 5자리를 초과하면 한자 4자리, 3자리... 우리 모두 알다시피 한자는 영어 자리 2자리를 차지합니다. 조판 중. 따라서 위와 유사하게 최대 10자리 숫자가 표시되어야 합니다.

인터넷에서 찾은 해결 방법이 별로 좋지 않아서 직접 작성해봤습니다. 나는 그들을 도우미에 넣었습니다. 아이디어에 대해 이야기하지 말고 바로 코드로 넘어가겠습니다.

<?php
class Zend_View_Helper_UserName
{
    public function userName($userName, $length)
    {
        $retUserName = &#39;&#39;;
        $position = 0;
        $count = 1;
        while ($count <= $length) {
            $subStr = mb_substr($userName, $position, 1, &#39;UTF-8&#39;);
            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 .= &#39;...&#39;;
        }
        return $retUserName;
    }
}

이렇게 사용하면 이름을 쉽게 가로챌 수 있습니다. 그리고 중국어와 영어 모두에 적합합니다. 단점은 substr과 같은 기능보다 일부 리소스를 소비할 수 있다는 것입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 오류 보고서다음 기사:PHP 오류 보고서