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

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

Linda Hamilton
リリース: 2024-12-07 15:01:15
オリジナル
616 人が閲覧しました

How Can I Precisely Truncate Multibyte Strings While Maintaining Word Boundaries?

マルチバイト文字列の正確な切り詰め

概要

文字列を特定の文字長に切り詰めるには、プログラミングにおける一般的なタスク。ただし、さまざまな幅の文字が含まれる可能性があるマルチバイト文字列を扱う場合は、より複雑になります。この質問は、単語の境界を維持しながらマルチバイト文字列を切り捨てることのニュアンスを詳しく掘り下げています。

PHP の mb_strimwidth 関数

回答で示唆されているように、PHP は mb_strimwidth( ) マルチバイト文字列の切り捨てを処理します。文字列、必要な幅、およびオプションのターミネータを引数として受け取ります。ただし、この関数は単語の境界を考慮しません。

カスタム切り捨てアルゴリズム

単語境界の切り捨てを実現するには、カスタム アルゴリズムを使用できます。

function truncate($string, $chars = 50, $terminator = ' …') {
    // Calculate the maximum length considering the terminator
    $max_length = $chars - mb_strlen($terminator);

    // Short circuit for strings shorter than the maximum length
    if (mb_strlen($string) <= $max_length) {
        return $string;
    }

    // Find the last space character within the maximum length
    $last_space_index = mb_strrpos($string, ' ', $max_length);

    // Cut the string at the last space or at the maximum length if no last space is found
    $truncated_string = (false !== $last_space_index)
        ? mb_substr($string, 0, $last_space_index)
        : mb_strimwidth($string, 0, $chars);

    // Append the terminator
    $truncated_string .= $terminator;

    return $truncated_string;
}
ログイン後にコピー

この関数は、で説明されている手順を実装します。質問:

  1. 最大長を計算します。
  2. 文字列が最大長より長いかどうかを検証します。
  3. 最大長を下回る最後のスペース文字を見つけます。
  4. それに応じて文字列をカットします。
  5. terminator.
  6. 切り詰められた文字列を返します。

デモ

次のコードは、カスタム切り詰めの使用法を示しています。 function:

$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = truncate($in, 50, ' …');

echo $out; // "Answer to the Ultimate Question of Life, the …"
ログイン後にコピー

結論

PHP の mb_strimwidth() 関数は、マルチバイト文字列を切り詰める簡単な方法を提供しますが、単語の境界は考慮されません。カスタム アルゴリズムを実装することで、単語境界の整合性を維持したより正確な切り捨てを実現できます。

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

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