在考虑"完全停止"时(在CachePHP TextHelper-> truncate中)截断html文本

Ale*_*lex 4 php arrays string cakephp truncate

编辑:

我最终使用了CakePHP的truncate()功能.它更快,支持unicode:D

但问题仍然存在:

如何使功能自动检测完全停止(.)并在此之后切断它?所以基本上$length是半被忽视的.因此,如果新文本将具有不完整的句子,则在句子结束之前将附加更多单词(或者删除,取决于从截止到下一个/上一个句子的字符串的长度)

编辑2: 我发现了如何检测完全停止.我换了:

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

 ...
Run Code Online (Sandbox Code Playgroud)

 if (!$exact) {
    $spacepos = mb_strrpos($truncate, '.');
 ...
Run Code Online (Sandbox Code Playgroud)

编辑 - 问题:

当我有像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));
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?我会开一个赏金,因为原来的问题已经回答了......

Ale*_*lex 5

这个片段解决了你正在寻找的东西,并列出了它的失败(句号可能不表示句子结束,其他标点符号可以结束句子).

它将扫描字符$maxLen,然后在找到的最后一次完全停止后有效地"丢弃"部分句子.

在您的情况下,您将在返回之前使用此功能$new_text.