ホームページ  >  記事  >  バックエンド開発  >  PHP 中国語と英語の混合文字列インターセプト メソッド

PHP 中国語と英語の混合文字列インターセプト メソッド

WBOY
WBOYオリジナル
2016-07-25 09:11:56951ブラウズ

中国語と英語の混合カウントとインターセプト。カスタム関数は必要ありませんが、PHP の mb 拡張機能が使用され、オリジナルの PHP 関数を使用して文字列インターセプトを簡単に処理できます。

まず、文字列をインターセプトする一般的な関数を紹介しましょう。 mb_strwidth($str, $encoding) は文字列の幅を返します $str 計算する文字列 $encoding 使用するエンコーディング (utf8、gbk など) mb_strimwidth($str, $start, $width, $tail, $encoding) は幅に応じて文字列をインターセプトします

$str インターセプトされる文字列 $start どの位置からインターセプトするか、デフォルトは 0 です $width インターセプトされる幅 $tail は、インターセプトされた文字列の後の文字列に追加されます。 $encoding 使用するエンコーディング

例:

  1. /**
  2. * utf8 エンコード形式
  3. * 1 つの漢字は 3 バイトを占有します
  4. * 1 つの漢字が 2 バイトを占有することを望みます、
  5. * 幅の観点から、2 つの英語文字が占める位置は 1 つの中国語文字に相当するため
  6. */
  7. // テスト文字列
  8. $str = 'aaaaahahaaaaahahahaaa';
  9. echo strlen($str); // 25バイトの出力にはstrlenのみが使用されます。
  10. // エンコーディングを指定する必要があります。指定しない場合は、内部コードを表示するために PHP の内部コード mb_internal_encoding() が使用されます
  11. // mb_strwidth を使用して幅 20 の文字列を出力し、utf8 エンコーディングを使用します
  12. echo mb_strwidth($ str, ' utf8');
  13. // 幅が 10 より大きい場合のみインターセプトします
  14. if(mb_strwidth($str, 'utf8')>10){
  15. // ここでは 0 からインターセプトするように設定し、10 回追加します。 utf8 エンコーディングを使用します
  16. // 追加された... も長さに計算されることに注意してください
  17. $str = mb_strimwidth($str, 0, 10, '...', 'utf8');
  18. }
  19. //最終的な出力は aaaa です... 4 つの a は 4 つの 1 として数えられ、2 つは 3 点として数えられ、3 つは 4+2+3=9 として数えられます
  20. // 理由は非常に単純ではないでしょうか?という人もいます。 9・10じゃないの?
  21. // 「あ」の後に「あ」が来るため、中国語のカウントは2、9+2=11が設定を超えているため、1を削除すると9になります
  22. echo $str;
コードをコピー

その他の文字列インターセプト機能: mb_strlen($str, $encoding) は文字列の長さを返します $str 計算する文字列 $encoding 使用するエンコーディング

mb_substr($str, $start, $length, $encoding) 文字列をインターセプトします $str インターセプトされる文字列 $start インターセプトを開始する場所 $length は長さをインターセプトします $encoding 使用するエンコーディング 実際、これら 2 つの関数は strlen() と substr() に非常に似ています。唯一の違いは、エンコーディングを設定できることです。

上記の 2 つの文字列インターセプト関数の例。

  1. /**
  2. * utf8エンコード形式
  3. * 漢字1文字は3バイトを占有します
  4. */
  5. $str = 'aa12ahaa';
  6. echo strlen($str); // 直接出力の長さは 9
  7. // 出力の長さは 7 です。なぜ 7 なのか?
  8. // ここでエンコードを設定した後は、中国語でも英語でも、それぞれの長さが 1 になることに注意してください
  9. // a a 1 2 ah a a
  10. // 1+1+1+1+1+1+1 = 7
  11. / / 正確に 7 文字ですか?
  12. echo mb_strlen($str, 'utf8');
  13. // mb_substr にも同じことが当てはまります
  14. // 今必要なのは 5 文字だけです
  15. echo mb_substr($str, 0, 5, ' utf8 '); // aa12 を出力します
コードをコピーします

ここでは 1 つずつ紹介しませんが、興味がある場合は、関連する内容を参照してください。 PHPマニュアル。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。