丸マルチバイト文字列をn字
質問
のようなこのメソッドは文字列フィルター作:
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;
}
しかし、あなたは必ずあなたの内部エンコーディングが正しく設定されていることを確認する必要があります。
他のヒント
私ではない通常、このような質問への答えは全体のコードだけが好きです。しかし、また、私は目が覚めた、と私は多分あなたの質問は、その日の残りのためのプログラムを行ってもいい気分で私を得るだろうと思っています。
私はこれを実行しようとしませんでしたが、それは仕事をしたり、少なくともあなたの道の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;
}
所属していません StackOverflow