3

PHP で説明フィールドを切り捨て、適切な位置に省略記号を挿入して、ユーザーがクリックして詳細を確認できるようにしようとしています。したがって、フィールドからいくつかの文字を取得します。

LEFT(html,340) as descr

次に、変数を設定します...

$desc= $a['descr'];

ここで難しい部分があります...文字列の最後の句読点を見つけて、それらを「...」に置き換えたいと思います。文をランダムな位置で分割するのは非常に見苦しいと思うからです。次に、文が長すぎて句読点がない場合、または結果が短すぎる場合、実際には最初に見つかったスペースを最後から置き換え始めます.

$desc1=preg_replace('/([\.\-_,:].*)$/','...',$desc);

    $desc=strlen(strlen($desc1)>170&&340>strlen($desc1))?$descr1:
        preg_replace('/(\s.*)$/','...',substr($desc,0,300));

これは私がこれまでに試したことですが、問題は文字列を完全にランダムな位置で分割することですが、最後の句読点の位置からではありません。うーん

また、句読点がいくつか一緒に見つかった場合も無力です。最後に、ダッシュの前にスペースがある場合にのみ、ダッシュを置き換えたいと思います。しかし、私はこれらのことを行う方法を理解できないようです。つまり、すべてをまとめる方法を意味します...

以上の点について、何かアドバイスをいただければ幸いです。

ああ、それが私がそれを解決した方法です

$desc1 = preg_replace('/[.,!:_]+[^.,!:_]*$/', '... ', $desc);
    $desc=(strlen($desc1)<170)?preg_replace('/[\s]+[^\s]*$/', '... ', $desc) : $desc1;
4

1 に答える 1

0

これが私の解決策です:

<?php

define("STR_LEN_THRESHOLD", 400); //Define the threshold in characters.

$punctuation = ".,!:_"; //Define punctuation marks
$string = "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus";
while (strlen($string) > STR_LEN_THRESHOLD) { //While string is too long
    $string = preg_replace("/[$punctuation][^$punctuation]+$/", "", $string); //Remove the last sentence
}
echo $string . "..."; //After enough was removed, add ...

これは以下を出力します:

Pellentesque 居住者 morbi tristique senectus et netus et malesuada 名声 ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi、condimentum sed、commodo vitae...

于 2012-06-07T19:16:46.417 に答える