编辑:
我最终使用了cakephp的truncate()函数。它速度快得多,支持unicode:d
但问题仍然是:
如何使功能自动检测到完全停止(.)并在此之后将其剪切?所以基本上$length会被半忽略。因此,如果新文本有一个不完整的句子,则会附加更多的单词,直到句子结束(或删除,具体取决于字符串从截止到下一个/上一个句子的长度)
编辑2:
我找到了如何检测全停的方法。我换了:

 if (!$exact) {
   $spacepos = mb_strrpos($truncate, ' ');

 ...

具有
 if (!$exact) {
    $spacepos = mb_strrpos($truncate, '.');
 ...

编辑-问题:
当我有像img这样的标记,它们的属性中有点时,文本在标记中被截断:
 $text = '<p>Abc def abc def abc def abc def. Abc def <img src="test.jpg" /></p><p>abc def abc def abc def abc def.</p>';

 echo htmlentities(truncate($text));

我该怎么解决?我会悬赏的,因为原来的问题已经被回答了…

最佳答案

This snippet解决您正在寻找的问题,并列出它的失败(句号可能不表示句子结束,其他标点符号可以结束句子)。
它将扫描小于cc>的字符,然后在找到最后一个句号后有效地“丢弃”一个部分句子。
在您的例子中,您将在返回$maxLen之前使用此函数。

10-04 12:21