ホームページ > バックエンド開発 > PHPチュートリアル > PHP で単語の境界を維持しながらマルチバイト文字列を安全に切り詰めるにはどうすればよいですか?

PHP で単語の境界を維持しながらマルチバイト文字列を安全に切り詰めるにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-04 05:41:09
オリジナル
607 人が閲覧しました

How Can I Safely Truncate Multibyte Strings in PHP While Preserving Word Boundaries?

PHP でのマルチバイト文字列の切り詰め

PHP でのマルチバイト文字列の切り詰めは、複雑な作業になる場合があります。この記事では、マルチバイト文字エンコーディングと単語境界の両方を考慮して、このような文字列を指定された文字数に切り詰めるという課題に取り組みます。

これを実現するには、1 つのアプローチとして、PHP の組み込み mb_strimwidth() 関数を使用します。指定された幅の文字列を切り詰めます。ただし、この関数は単語の境界を考慮しません。

切り捨てのカスタム実装

マルチバイト文字エンコーディングと単語の境界の両方を処理するカスタム実装を作成できます。

  1. 切り詰め長さの計算:切り詰める最大文字数からターミネータ文字列の長さを減算します。
  2. 文字列長の検証: 入力文字列が計算された切り詰め長よりも長いかどうかを確認します。それ以外の場合は、変更せずに返します。
  3. 単語境界の検索: mb_strrpos() を使用して、文字列内の切り捨て長より下の最後のスペース文字を検索します。
  4. 文字列の切り取り: 単語の境界が見つかった場合は、その位置で文字列を切り捨てます。それ以外の場合は、計算された切り詰め長で切り詰めます。
  5. Append Terminator: 切り詰められた文字列にターミネータ文字列を追加します。
  6. Return Truncated String: 出力切り捨てられて追加されたものstring.

使用例:

function truncate($string, $chars = 50, $terminator = ' …') {
  // Calculate truncation length
  $trunc_len = $chars - strlen($terminator);

  // Validate string length
  if (strlen($string) <= $trunc_len) {
    return $string;
  }

  // Find word boundary
  $space_pos = mb_strrpos($string, ' ', -$trunc_len);

  // Cut string
  if ($space_pos !== false) {
    $truncated_string = mb_substr($string, 0, $space_pos);
  } else {
    $truncated_string = mb_strimwidth($string, 0, $trunc_len);
  }

  // Append terminator
  return $truncated_string . $terminator;
}
ログイン後にコピー

この関数は、文字エンコーディングと単語境界の両方を考慮して、マルチバイト文字列を切り捨てるために使用できます。この一般的な PHP タスクに対して簡単で堅牢なソリューションを提供します。

以上がPHP で単語の境界を維持しながらマルチバイト文字列を安全に切り詰めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート