【发布时间】:2011-09-15 22:38:17
【问题描述】:
编辑:
我最终使用了 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));
我该如何解决这个问题?我会开一个赏金,因为原来的问题已经回答了......
【问题讨论】:
-
我想你刚刚回答了你的问题。因此,您可以继续添加新单词,直到找到“。”。并从计算文本中减去单词,直到找到“。”然后比较长度并选择好的长度。完成此操作后,尝试优化:)
-
嘿!我想我确实回答了你原来的问题,但我很高兴你找到了解决方案!我正在查看 Rails 的
truncate方法的源代码,它提供的功能与您正在寻找的功能非常相似。 -
谢谢 Alex,你能发个 Rails 函数的链接吗?
-
当然可以在the docs找到。您可以传递一个
:separator参数(您可以将其设置为一个句点),它会在自然中断处截断文本。 -
老实说,次要问题应该完全是另一个问题。但是,既然你已经在这里放了一个赏金,我们不妨试一试:)
标签: php arrays string cakephp truncate