编辑:
我最终使用了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
之前使用此函数。