私はニュース スクリプトに取り組んでおり、全文コンテンツからほとんどのテキストを取得する要約関数を作成したいと考えています。関数は 200 文字の全文を取得し、これらの 200 文字の最後のスペースを検索します。関数は、html やその他のコードを無視し、全文コンテンツの最初の 200 文字のみを表示する必要もあります。
問題に最適な関数と、その関数を実行する方法は?
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
ます。
最良の解決策は、編集者が手動で入力したデータベース内の指定された「要約」フィールドであるようです。
将来、多くの頭痛の種から解放されます。
次の関数を使用して、ティーザー文字列の長さが指定された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);
}
短くてシンプル。
これを行うことができると呼ばれる単純な関数がありsubstr($string, $position, $length)
ます。
のように使う
$brief = substr($bigContent, 0, 200); //for 200 chars