编辑:
我最终使用了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解决了你正在寻找的东西,并列出它的失败(句号可能不表示句子结束,其他标点符号可以结束句子).
它会将字符扫描到$maxLen,然后在找到的最后一次完整停止后有效地“丢弃”部分句子.
在你的情况下,你在返回$new_text之前就使用了这个函数.