質問

のようなこのメソッドは文字列フィルター作:

public function truncate($string, $chars = 50, $terminator = ' …');

いこ

$in  = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";

またこの

$in  = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";

ることが $chars マイナスのcharの $terminator 文字列になります。

また、フィルターはカットで最初の単語の境界以下 $chars 制限など

$in  = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";

っているこの作品がこれらの手順

  • substract額字でターミネーターからの最大文字数
  • を検証する文字列は、以下の計算限界に戻すわ
  • の最後のスペース文字列を文字列以下の計算限定の単語境界
  • カットという文字列が最後のスペースまたは計算限界のない最終スペースが見つから
  • 追加ターミネーターに文字列
  • return string

しかし、いった様々な組み合わせの str*mb_* 機能がすべて解約違います。このできないが難しいので、私も何かが足りない.いいシェア実装のためのこ または も資源がめでとう"(いとくとらいのことを思い出します。

感謝

P.S.但し、確認 https://stackoverflow.com/search?q=truncate+string+php 前:)

役に立ちましたか?

解決

これを試してみてください

function truncate($string, $chars = 50, $terminator = ' …') {
    $cutPos = $chars - mb_strlen($terminator);
    $boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $cutPos)), ' ');
    return mb_substr($string, 0, $boundaryPos === false ? $cutPos : $boundaryPos) . $terminator;
}

しかし、あなたは必ずあなたの内部エンコーディングが正しく設定されていることを確認する必要があります。

他のヒント

だからPHPではのマルチバイト文字の切り詰めと

  • mb_strimwidth —取得し切り捨てを文字列で指定された幅

なに従う言葉の境界線ものです。がお手軽にしかし!

私ではない通常、このような質問への答えは全体のコードだけが好きです。しかし、また、私は目が覚めた、と私は多分あなたの質問は、その日の残りのためのプログラムを行ってもいい気分で私を得るだろうと思っています。

私はこれを実行しようとしませんでしたが、それは仕事をしたり、少なくともあなたの道の90%を取得する必要があります。

function truncate( $string, $chars = 50, $terminate = ' ...' )
{
    $chars -= mb_strlen($terminate);
    if ( $chars <= 0 )
        return $terminate;

    $string = mb_substr($string, 0, $chars);
    $space = mb_strrpos($string, ' ');

    if ($space < mb_strlen($string) / 2)
        return $string . $terminate;
    else
        return mb_substr($string, 0, $space) . $terminate;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top