大沙包 / shortener
将普通文本或HTML缩短到$length,防止单词和标签断裂。
1.2
2024-03-05 09:59 UTC
Requires
- php: >=8.1
Requires (Dev)
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_text
和shorten_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 }