大沙包/shortener

将普通文本或HTML缩短到$length,防止单词和标签断裂。

1.2 2024-03-05 09:59 UTC

This package is auto-updated.

Last update: 2024-09-05 10:59:21 UTC


README

将普通文本或HTML缩短到$length,防止单词和标签断裂。

缩短普通文本

要截断字符串到$length,请使用此静态方法

Shortener::shortenText(string $source, int $length = 50, string $add = '...', bool $multiSpace = false): string

除非第一个单词的长度大于$length,否则缩短器永远不会打断单词。缩短器使用mb_strlen,而不是strlen,因此可以正确地计算UTF-8符号。如果$multiSpace为true,则缩短器将每个空格(包括\n等)计为一个符号,否则将一组空格计为一个符号。

例如,如果源字符串是"Lorem ipsum dolor sit amet",以下是长度和结果

26: Lorem ipsum dolor sit amet (完整字符串)

25: Lorem ipsum dolor sit...

10: Lorem...

6: Lor...

那些 ... 也会被计算在内。因此,结果字符串的长度将包括$add的长度

如果您需要多次缩短一个字符串,请使用这种方法以提高性能

$shortener = new TextShortener('Lorem ipsum dolor');
echo $shortener->shorten(10, '...');

因此,源字符串只会解析一次。

缩短HTML

要截断HTML字符串到$length,请使用此静态方法

Shortener::shortenHtml(string $source, int $length = 50, string $add = '...'): string

$shortener = new HtmlShortener('<u>Lorem <i>ipsum</i> dolor sit amet</u>');
echo $shortener->shorten(26, '...');
echo $shortener->shorten(25, '...');
echo $shortener->shorten(10, '...');
echo $shortener->shorten(6, '...');

结果

<u>Lorem <i>ipsum</i> dolor sit amet</u> (full string)
<u>Lorem <i>ipsum</i> dolor sit...</u>
<u>Lorem...</u>
<u>Lor...</u>

如您所见,没有丢失关闭标签。如果您的源字符串是有效的HTML,您将得到有效的HTML。

HtmlShortener理解&xxx;符号并将它们计为一个。

与Twig一起使用

该软件包包含ShortenerTwigExtension类,提供shorten_textshorten_html twig过滤器。

{{ 'Lorem ipsum dolor sit amet' | shorten_text(25, '...') }}

{{ '<u>Lorem <i>ipsum</i> dolor sit amet</u>' | shorten_html(25, '...') }}

要使用它们,只需注册扩展。例如,在Symfony中,将以下内容添加到您的config/services.yaml中

services:
    shortener_twig_extension:
        class: SashaBo\Shortener\Extras\ShortenerTwigExtension
        tags:
            - { name: twig.extension }