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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 20:20:11279ブラウズ

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

意味上の整合性の維持: 最も近い単語境界で文字列を切り捨てる

プログラミングで文字列を扱うとき、特定の長さに合わせて文字列を切り詰める必要があることがよくあります。ただし、単純に文字を切り捨てると、特に単語の途中で切り捨てが発生した場合に、不自然な結果や不正確な結果が生じる可能性があります。

PHP には、セマンティックな整合性を維持しながら文字列を切り詰めるためのオプションがいくつかあります。

Wordwrap と部分文字列の使用

wordwrap 関数は、単語を考慮して文字列を複数の行に分割できます。境界線。最大幅を指定すると、希望の長さよりも前の最も近い単語で改行を作成できます。次のコード スニペットは、このアプローチを示しています。

$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
$desired_width = 200;

$truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n"));

$truncated_string には目的のテキストが含まれていますが、200 番目の文字より前の最後の単語の終わりまでしか含まれていません。

エッジ ケースの処理

このアプローチはうまく機能しますが、元の文字列が必要な幅より短い場合は処理できません。これに対処するには、ロジックを条件ステートメントでラップします。

if (strlen($string) > $desired_width) {
  $truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n"));
}

改行の処理

文字列に必要な切り捨てポイントの前に改行文字が含まれている場合、微妙な問題が発生します。このような場合、wordwrap 関数によって途中で改行が作成される可能性があります。これを克服するには、より洗練された正規表現ベースのアプローチを使用できます。

function tokenTruncate($string, $desired_width) {
  $parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);
  $parts_count = count($parts);

  $length = 0;
  $last_part = 0;
  for (; $last_part < $parts_count; ++$last_part) {
    $length += strlen($parts[$last_part]);
    if ($length > $desired_width) { break; }
  }

  return implode(array_slice($parts, 0, $last_part));
}

この関数は単語トークンを反復処理し、合計の長さが目的の幅を超えると停止します。次に、切り詰められた文字列が単語境界で終わるように再構築します。

複雑さのテストと処理

単体テストは、コードの機能を検証するために重要です。提供されている PHP PHPUnit テスト クラスは、tokenTruncate 関数の正しい動作を示しています。

「à」などの特殊な UTF8 文字には追加の処理が必要な場合があります。これは、正規表現の末尾に「u」を追加することで実現できます。

$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);

これらの手法を採用することで、PHP で文字列を自信を持って切り詰めることができ、意味上の整合性を維持し、見た目が美しく一貫性のある結果を保証できます。 .

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

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