ホームページ  >  記事  >  バックエンド開発  >  PHP による中国語と英語の文字列操作のインターセプト

PHP による中国語と英語の文字列操作のインターセプト

巴扎黑
巴扎黑オリジナル
2016-11-22 10:43:081173ブラウズ

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