2
$theExcerpt = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis'

$theExcerptAppend = (strlen($theExcerpt) > 156) ? '...' : '';
$theExcerpt = preg_replace('/\s+?(\S+)?$/', '', substr($theExcerpt, 0, 156));
$theExcerpt .= $theExcerptAppend;

入力フレーズの長さが 156 文字を超えている限り、スクリプトは正常に機能します。ただし、長さが 156 未満の場合 (ここでは 154 です)、単語を含む文字列がまだ 156 未満であっても、最後の単語が削除されます。

: 文字列が単語の途中で終了するのは望ましくありませんが、単語を含めることが strlen 値の 156 を超えない場合は、含める必要があります。

4

4 に答える 4

5

substrと_strrpos

if (strlen($theExcerpt) > 156) {
    $theExceprt = substr($theExcerpt, 0, 156);
    $theExcerpt = substr($theExcerpt, 0, strrpos($theExcerpt, ' '));        
    $theExcerpt .= '...';
}
于 2013-03-29T14:31:51.717 に答える
1

誰かが重複へのリンクを投稿したと思います。受け入れられた解決策は次のとおりです。

/^.{1,156}\b/

現在、これは常に 156 文字未満です。156 番目の文字が単語の途中にある場合、最後の単語をカットします。ただし、逆の効果を持つように変更を加えることができます。

注: この正規表現を使用して文字列に preg_match を適用するだけです。

編集:
反対の効果(最後の単語を取得するために156文字を超える):

/^.{1,155}(.)?(?(1).*?\b)/
于 2013-03-29T14:27:16.427 に答える
0

どうですか :

$theExcerpt = preg_replace('/(?=.{156})\s+?(\S+)?$/', '', substr($theExcerpt, 0, 156));

これは、長さが 156 文字を超える場合にのみ文を処理します。

于 2013-03-29T14:23:06.087 に答える
0

次のことを試してください。

$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus egestas, lacus non dapibus placerat, justo mi adipiscing libero, id ultrices neque metus nec lorem. Quisque vitae dui facilisis ligula tristique dapibus. Ut egestas ligula in tortor facilisis pharetra id vitae eros. Donec commodo laoreet nisi porttitor tincidunt. Donec tortor enim, pharetra in accumsan sit amet, scelerisque ac massa. Morbi massa erat, mattis non faucibus a, feugiat imperdiet lectus. Praesent tincidunt libero id enim cursus non sagittis nisl accumsan. Maecenas massa lorem, consectetur ut rhoncus ac, ullamcorper a tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sit amet eros.';

$limit = 156;
$output = preg_replace('/^(.{'.$limit.'})(\S|\s|\w+)(.*)/', '$1$2 ...', $string);

echo $output;
于 2013-03-29T14:26:28.677 に答える