-9

私はニュース スクリプトに取り組んでおり、全文コンテンツからほとんどのテキストを取得する要約関数を作成したいと考えています。関数は 200 文字の全文を取得し、これらの 200 文字の最後のスペースを検索します。関数は、html やその他のコードを無視し、全文コンテンツの最初の 200 文字のみを表示する必要もあります。

問題に最適な関数と、その関数を実行する方法は?

4

4 に答える 4

5

CodeIgniterフレームワークからこのヘルパー関数をチェックアウトします。

/**
* Character Limiter
*
* Limits the string based on the character count.  Preserves complete words
* so the character count may not be exactly as specified.
*
* @access   public
* @param    string
* @param    integer
* @param    string  the end character. Usually an ellipsis
* @return   string
*/

function character_limiter($str, $n = 500, $end_char = '…')
{
    if (strlen($str) < $n)
    {
        return $str;
    }

    $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));

    if (strlen($str) <= $n)
    {
        return $str;
    }

    $out = "";
    foreach (explode(' ', trim($str)) as $val)
    {
        $out .= $val.' ';

        if (strlen($out) >= $n)
        {
            $out = trim($out);
            return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
        }
    }
 }

次の関数を使用できます。

echo character_limiter($text, 200);

HTML タグを避ける必要がある場合は、関数strip_tagsを呼び出す前に関数を使用できcharacter_limiterます。

于 2012-04-29T09:28:31.620 に答える
3

最良の解決策は、編集者が手動で入力したデータベース内の指定された「要約」フィールドであるようです。

将来、多くの頭痛の種から解放されます。

于 2012-04-29T09:28:43.713 に答える
0

次の関数を使用して、ティーザー文字列の長さが指定されたmaxlengthを超えないようにしますが、それでも単語全体を保持します。

function teaser( $input, $length = 200)
{
  if( strlen($input) <= $length )
    return $input;

  $parts = explode(" ", $input);

  while( strlen( implode(" ", $parts) ) > $length )
    array_pop($parts);

  return implode(" ", $parts);
}

短くてシンプル。

于 2012-04-29T09:38:51.527 に答える
0

これを行うことができると呼ばれる単純な関数がありsubstr($string, $position, $length)ます。

のように使う

$brief = substr($bigContent, 0, 200); //for 200 chars
于 2012-04-29T09:32:34.720 に答える