Php 将文本限制为一定数量的字符,但在最后20个字符内找到句点时停止

Php 将文本限制为一定数量的字符,但在最后20个字符内找到句点时停止,php,text,punctuation,Php,Text,Punctuation,所以,我有这个功能,从大型文本中产生一个摘录 函数摘录($string,$max_chars=160,$more='…){ if(strlen($string)>max_chars){ $cut=substr($string,0,$max_chars); $string=substr($cut,0,strrpos($cut,,))。$more; } 返回$string; } 这对它的意图来说很好——它将给定的文本限制为一定数量的字符,而不剪切单词 以下是一个有效的示例: $str=“使用PHP

所以,我有这个功能,从大型文本中产生一个摘录

函数摘录($string,$max_chars=160,$more='…){
if(strlen($string)>max_chars){
$cut=substr($string,0,$max_chars);
$string=substr($cut,0,strrpos($cut,,))。$more;
}
返回$string;
}
这对它的意图来说很好——它将给定的文本限制为一定数量的字符,而不剪切单词

以下是一个有效的示例:

$str=“使用PHP最好的地方是它对新手来说非常简单,但为专业程序员提供了许多高级功能。不要害怕阅读一长串PHP功能。您可以在短时间内开始编写简单的脚本。”;
echo摘录(160美元);
这将产生此输出

使用PHP最好的地方是,它对于新手来说非常简单,但对于专业程序员来说,它提供了许多高级特性。不要害怕

然而,我试图找出如果在最后20个字符的摘录中发现句号、感叹号或问号,如何停止。因此,使用上面的句子,它将产生以下输出:

使用PHP最好的地方是,它对于新手来说非常简单,但对于专业程序员来说,它提供了许多高级特性


有没有办法将其存档?

我会尝试以下方法,并将其放入一个循环中,供您所有人使用:

// Define the characters to look for:
$charToCheck = array(".", "!", "?");

// Loop through each character to check
foreach ( $charToCheck as $char) {

    // Gives you the last index of a period. Returns false if not in string
    $lastIndex = strrpos($cut, $char);

    // Checks if character is found in the last 20 characters of your string
    if ( $lastIndex > ($max_chars - 20)) {
        // Returns the shortened string beginning from first character
        $cut = substr($cut, 0, $lastIndex + 1);
    }
}

与Fuzzel的答案相同,但在第一次匹配时退出返回substr(不带“…”)的循环

function excerpt( $string, $max_chars = 160, $more = '...' ) {

    $punct = array('.', '!', '?');  // array of punctuation chars to stop on

    if ( strlen( $string ) > $max_chars ) {

        $cut = substr( $string, 0, $max_chars );

        $string = substr( $cut, 0, strrpos( $cut, ' ' ) );

        foreach( $punct as $stop ){
            $stop_pos = stripos( $string, $stop, $max_chars - 20 );
            if( $stop_pos !== false){
                return substr( $string, 0, $stop_pos + 1);
            }
        }
    }

  return $string . $more;
}

$str = "The best things in using PHP are that it is extremely simple for a newcomer, but offers many advanced features for a professional programmer! Don't be afraid reading the long list of PHP's features. You can jump in, in a short time, and start writing simple scripts in a few hours.";

echo excerpt( $str, 160 );

我重写Fuzzel的代码时也考虑到了同样的问题。然而,我认为他的回答是正确的,因为他给出了最初的想法。非常感谢。我试着用快一点的,但找不到。我不能用preg_split()完成它,这是我最初的想法。您的代码工作正常,我刚刚重写了它,以便对其进行优化,并在第一次匹配时退出循环。非常感谢。