1

非常に非標準的な方法で文字列をトリミングしようとしています。テキストは、目に見えるティーザーと、リンクをクリックした後に JS によって表示される非表示の残りの部分の 2 つの部分に分かれています。私はそのような何かが必要です: 私のテキスト:

Teaser: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas enim est, convallis non ullamcorper hendrerit, vehicula ac quam. malesuada suscipit eleifend で。 残り: Donec posuere ipsum at ipsum feugiat eu ornare nunc ultricies. Donec eleifend odio a eros semper cursus. Donec posuere ipsum at ipsum feugiat eu ornare nunc ultricies. Donec eleifend odio a eros semper cursus.

私の問題は、すべてのテキストがデータベースの単一フィールドに格納されているためです。2 つのドットまたは 100 文字の後にティーザーをトリミングしてから、テキストの残りの部分を表示する必要があります (文字を失うことなく)。「残り」の部分は、上の例のように新しい文と大きな文字で始める必要があります。

テキストに substr を使用すると、残りはランダムな文字で始まります...

$text = '';
$text = strip_tags($row['text']);
$text = explode('.', $text);
$teaser = $text[0].$text[1].'.';
$cut = strlen($teaser);
if($cut > 100) 
{
    $teaser = trimString($text, 0, 100);
    $cut = 100;
}
$theRest = substr($row['text'], $cut);

これで、「。」で終わるティーザーがあります。または「...」(私の関数trimStringはそのように機能します)そしてこれは良いことです。しかし、このシナリオの残りはランダムな文字で始まり、これは私が望むものではありません. 誰かが文の途中でドットを使用すると、別の問題が発生するのではないかと心配しています。何か案は?

4

1 に答える 1

0
$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas enim est, convallis non ullamcorper hendrerit, vehicula ac quam. In malesuada suscipit eleifend. Donec posuere ipsum at ipsum feugiat eu ornare nunc ultricies. Donec eleifend odio a eros semper cursus. Donec posuere ipsum at ipsum feugiat eu ornare nunc ultricies. Donec eleifend odio a eros semper cursus.';

$cut = strpos($string, '. ', 100)+1;
$teaser = substr($string, 0, $cut);
$rest = substr($string, $cut);

説明: strpos()' の最初の出現位置を検索するために使用されます。' (新しい文の開始として)。

オフセット引数 (100) を使用して、位置 100 から検索を開始しました。オフセットに +1 を追加して、ドットを表示しました。

したがって、 $new_cut は、でstrpos()使用するために計算された位置ですsubstr()


これに関する唯一の問題は、複数の針を使用できないことです。つまり、「...」を同時に検索することを意味します。この問題を解決して私の答えと組み合わせるのに役立つ可能性のある SO に関する別の投稿があります。

複数の針を持つ strpos() ?

于 2013-04-09T10:41:18.440 に答える