中国語と英語の混合カウントとインターセプト。カスタム関数は必要ありませんが、PHP の mb 拡張機能が使用され、オリジナルの PHP 関数を使用して文字列インターセプトを簡単に処理できます。
まず、文字列をインターセプトする一般的な関数を紹介しましょう。
mb_strwidth($str, $encoding) は文字列の幅を返します
$str 計算する文字列
$encoding 使用するエンコーディング (utf8、gbk など)
mb_strimwidth($str, $start, $width, $tail, $encoding) は幅に応じて文字列をインターセプトします
$str インターセプトされる文字列
$start どの位置からインターセプトするか、デフォルトは 0 です
$width インターセプトされる幅
$tail は、インターセプトされた文字列の後の文字列に追加されます。
$encoding 使用するエンコーディング
例:
-
-
- /**
- * utf8 エンコード形式
- * 1 つの漢字は 3 バイトを占有します
- * 1 つの漢字が 2 バイトを占有することを望みます、
- * 幅の観点から、2 つの英語文字が占める位置は 1 つの中国語文字に相当するため
- */
- // テスト文字列
- $str = 'aaaaahahaaaaahahahaaa';
- echo strlen($str); // 25バイトの出力にはstrlenのみが使用されます。
- // エンコーディングを指定する必要があります。指定しない場合は、内部コードを表示するために PHP の内部コード mb_internal_encoding() が使用されます
- // mb_strwidth を使用して幅 20 の文字列を出力し、utf8 エンコーディングを使用します
- echo mb_strwidth($ str, ' utf8');
- // 幅が 10 より大きい場合のみインターセプトします
- if(mb_strwidth($str, 'utf8')>10){
- // ここでは 0 からインターセプトするように設定し、10 回追加します。 utf8 エンコーディングを使用します
- // 追加された... も長さに計算されることに注意してください
- $str = mb_strimwidth($str, 0, 10, '...', 'utf8');
- }
- //最終的な出力は aaaa です... 4 つの a は 4 つの 1 として数えられ、2 つは 3 点として数えられ、3 つは 4+2+3=9 として数えられます
- // 理由は非常に単純ではないでしょうか?という人もいます。 9・10じゃないの?
- // 「あ」の後に「あ」が来るため、中国語のカウントは2、9+2=11が設定を超えているため、1を削除すると9になります
- echo $str;
コードをコピー
その他の文字列インターセプト機能:
mb_strlen($str, $encoding) は文字列の長さを返します
$str 計算する文字列
$encoding 使用するエンコーディング
mb_substr($str, $start, $length, $encoding) 文字列をインターセプトします
$str インターセプトされる文字列
$start インターセプトを開始する場所
$length は長さをインターセプトします
$encoding 使用するエンコーディング
実際、これら 2 つの関数は strlen() と substr() に非常に似ています。唯一の違いは、エンコーディングを設定できることです。
上記の 2 つの文字列インターセプト関数の例。
-
-
- /**
- * utf8エンコード形式
- * 漢字1文字は3バイトを占有します
- */
- $str = 'aa12ahaa';
- echo strlen($str); // 直接出力の長さは 9
- // 出力の長さは 7 です。なぜ 7 なのか?
- // ここでエンコードを設定した後は、中国語でも英語でも、それぞれの長さが 1 になることに注意してください
- // a a 1 2 ah a a
- // 1+1+1+1+1+1+1 = 7
- / / 正確に 7 文字ですか?
- echo mb_strlen($str, 'utf8');
- // mb_substr にも同じことが当てはまります
- // 今必要なのは 5 文字だけです
- echo mb_substr($str, 0, 5, ' utf8 '); // aa12 を出力します
コードをコピーします
ここでは 1 つずつ紹介しませんが、興味がある場合は、関連する内容を参照してください。 PHPマニュアル。
|