中国語と英語の混合カウントとインターセプトに関して、最初に思い浮かぶのは、ASCII、16 進数、通常のマッチング、ループ カウンティングです。
今日は、PHP の mb 拡張機能を共有して、文字列を簡単に処理する方法を説明します。
まず使用する関数を紹介します:
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 を出力します... a が 4 つで 1 が 4 つとして数えられ、2 つで 3 点として数えられ、3 つで 4+2+3=9 として数えられます
- // とても単純ではないですかという人もいますが、なぜですか? 10ではなく9ですか?
- // 「ああ」の後に「ああ」が続くため、中国語のカウントは 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() に非常に似ています。唯一の違いは、エンコーディングを設定できることです。
以下の例:
/**
- * 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を出力
-
コードをコピー
実際、mb 拡張子には便利な関数がたくさんあるので、ここではすべてをリストすることはしません。
興味のある友達は公式マニュアルをチェックしてください
http://www.php.net/manual/zh/ref.mbstring.php
さて、今日はここまでです。
|