3

このphpスクリプトを見つけました:

// HTML を壊さないようにタグを削除 $string = strip_tags($string);

if (strlen($string) > 500) {

// truncate string
$stringCut = substr($string, 0, 500);

// make sure it ends in a word so assassinate doesn't become ass...
$string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href="/this/story">Read More</a>';  } echo $string;

webbiedave によって作成されます。今私の質問は、 strrpos で指定してスペースまたはドットを見つけるにはどうすればよいですか?

したがって、文字列を 22 に制限し、StackOverFlow のようなものがあれば、これまでで最高のサイトです --> 出力 StackOverFlow は ... そして、http://stackoverflow.comのようなものがあれば、これまでで最高のサイトです -- > のみを出力します ... 彼はスペースと文字列の長さ > 22 を見つけられませんでした。 -> http://stackoverflowになる... ?

4

3 に答える 3

2

単語を壊さずにこれを分割したいが、行制限を尊重している場合wordwrapは、他の分割方法の代わりに使用してください。

$longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut purus a tellus ultrices vulputate. Aliquam posuere facilisis elit ut adipiscing. Nunc auctor dignissim porta. Vestibulum vitae tempor augue. Nam vel odio quis quam gravida ultrices sed a arcu. Phasellus nec odio massa. Duis imperdiet rutrum mi, vitae volutpat nulla convallis quis. Donec dignissim pulvinar mauris id molestie. Duis id mauris augue, id sagittis velit. Ut justo lectus, scelerisque egestas tempor et, facilisis vitae erat. Quisque ut mattis nulla. Donec a justo quis nisi tempus ultrices. Phasellus non dui non dolor tristique tincidunt vitae imperdiet libero. Pellentesque pretium luctus sem.";

$makeLine = wordwrap( $longText, 50, PHP_EOL );

echo $makeLine;

前と後: http://codepad.org/Dqz8qzAy

おそらく要約テキストとして最初の行のみが必要な場合は、結果の文字列を分解し、結果の配列から最初の結果をシフトすることができます。

$longText = "...";

$makeLine = wordwrap( $longText, 50, '\r\n' );
$firstSen = array_shift( explode( '\r\n', $makeLine ) );

echo $firstSen; // Lorem ipsum dolor sit amet, consectetur adipiscing...
于 2012-04-13T08:49:42.113 に答える
1

文字列を最後からチェックします。不完全な単語を削除する必要があります。その不完全な単語の条件は、短い文字列がスペースまたは「!」などの終了文字で終わっていない場合です。または単にドット。次の条件は、文字列の終わりの後の+1記号もそのような文字であるかどうかを確認することです。それがあなたである場合、あなたはただ端から次のスペースまで任意の文字を削除する必要があります。これは、regexpによって実行できます(/ [:alfa] + $ /に似た何かを実行する必要があります)。

これは基本的なことを行う簡単な方法ですが、良いスタートだと思います。

それが何であるかの例:

function word_wrap_custom($string, $limit){
$oneWord = explode(' ', $string);
if(count($oneWord) < 2 )
    return $oneWord[0];
$string = substr($string, 0, $limit + 2);

$endchar =  substr($string, $limit, $limit + 1);

$postendchar = substr($string, $limit + 1, $limit + 2);

$arrAccetpEndChar = array(' ', '!', '?', ',', '.', ';', ':');

if(in_array($postendchar, $arrAccetpEndChar) || in_array($endchar, $arrAccetpEndChar))
{
    return $string;
}
else
{
    return preg_replace('/[A-Za-z0-9]+$/', '', $string);
}
}
于 2012-04-13T08:58:54.947 に答える
0

これは単語を壊しません:

function ShortenText($text, $chars)
{
    $chars = $chars;$text = $text." ";
    $countchars = strlen($text);
    if($countchars > $chars)
    {
        $text = substr($text,0,$chars);
        $text = substr($text,0,strrpos($text,' '));
        $text = $text."...";
    }
    return $text;
}
于 2012-04-13T08:55:02.633 に答える