-1

SOでこの質問をした後、Web上で直接的な回答/コードが見つからなかったために、文字列の簡単なバージョンを取得するカスタムPHP関数を準備する必要がありました。

要件は次のとおりです。

  1. でエンコードされた 、、multibyte languageなどの文字の認識şığUTF-8
  2. 許容される長さを決定できる (文字数を使用して)
  3. 長い文字列の一部を取得した後、文字列の末尾にある単語は意味のあるものでなければならず、その部分の末尾に「...」を連結する必要があります
  4. バイトではなく、キーストローク (文字) を考慮に入れる必要があります

読者はコードが機能することを知っているはずですが、私は専門家ではありません。より効率的で、より深く考えられたコーディングによって、同じ目的を達成することが可能であると私は信じています。ご覧のとおり、コードにはセキュリティ上の問題はなく、入力文字列が許可されているよりも長い場合にのみ操作します。

よろしく

4

1 に答える 1

0
// PrintBrief   : Only introduction words (brief) are printed, multibyte safe
//                IMPORTANT: assumed that no tag has been used in input string
//                output's last word be a meaningful word, no need to worry about erroneous multibyte slicing
// $str         : string    input string to be written briefly
// $max_chars   : number    if string is longer than $max_chars, only first $max_chars will be the source string
// $encoding    : string    multibyte encoding
function PrintBrief ($str , $max_chars = ALLOWED_NUM_OF_CHARS, $encoding = "UTF-8")
{
    mb_regex_encoding($encoding);
    mb_internal_encoding($encoding);
    if ( mb_strlen($str , $encoding) > $max_chars )
    {
        $str = mb_substr($str , 0 , $max_chars , $encoding);
        $w = array();
        $w = mb_split(' ',$str);
        $k = array_pop($w);
        $k = trim(implode(' ', $w));
        $punc = array(';' , ',');
        for ( $i = 1 ; $i <= count($punc) ; $i++ )
        { $k = rtrim($k , $punc[$i] ); }
        return $k.' ...';

    }
    else
    {
        return $str;

    }
}

使用例:

$str = 'şğıöç İĞŞ ĞŞĞŞ Öİ ÇÇ Orta Amerika\'nın en büyük ülkesi Nikaragua\'nın başkenti Managua dün sabaha karşı büyük bir patlamayla sarsıldı. Olayın, şehre düşen ufak bir meteroit sonucu açılan krater çukurundan kaynaklandığı anlaşıldı. 1 milyon 200 bin kişinin yaşadığı ve bünyesinde ulsulararası bir havalimanının da olduğu şehre meteorit düşmesi sonucu, sürpriz bir şekilde can veya mal kaybı yaşanmadı ancak 12 metre çapında bir krater çukuru açıldı ve patlama neredeyse şehrin tamamında hissedildi.';

ALLOWED_NUM_OF_CHARS = 300 設定で呼び出した後

echo PrintBrief ($str);

出力は次のとおりです。

sğıöçİĞŞĞŞĞŞÖİÇÇOrtaAmerika'nınenbüyükülkesiNikaragua'nınbaşkentiManaguadünsabahakarşıbüyükbirpatlamaylasarsıldı。Olayın, şehre düşen ufak bir meteroit sonucu açılan krater çukurundan kaynaklandığı anlaşıldı. 1 milyon 200 bin kişinin yaşadığı ve bünyesinde ulsulararası bir ...

于 2014-09-08T17:06:14.770 に答える