오늘 이런 문제가 발생했습니다. 조판 요구 사항으로 인해 사용자 이름이 너무 길면 가로채서 다음과 같이 표시됩니다. 우리의 요구사항은 시나 웨이보와 비슷합니다. 중국어라면 최대 5자리까지 표시할 수 있고, 5자리를 초과하면 한자 4자리, 3자리... 우리 모두 알다시피 한자는 영어 자리 2자리를 차지합니다. 조판 중. 따라서 위와 유사하게 최대 10자리 숫자가 표시되어야 합니다.
인터넷에서 찾은 해결 방법이 별로 좋지 않아서 직접 작성해봤습니다. 나는 그들을 도우미에 넣었습니다. 아이디어에 대해 이야기하지 말고 바로 코드로 넘어가겠습니다.
<?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과 같은 기능보다 일부 리소스를 소비할 수 있다는 것입니다.