今日はこんな問題に遭遇しました。誰もが遭遇したことがあると思いますが、タイプセットの要件により、ユーザー名が長すぎると、インターセプトされ、... と表示されます。 私たちのニーズは Sina Weibo と似ています。中国語の場合は 5 桁まで表示でき、5 桁を超えると 4 つの漢字が表示されます。ご存知のとおり、1 つの中国語の文字は英語の 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 などの関数よりもリソースを消費する可能性があることです。