PHPackages                             simbiat/htmlcut - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. simbiat/htmlcut

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

simbiat/htmlcut
===============

Class to cut HTML text into something suitable for preview.

2.0.0+20250413(1y ago)184[1 issues](https://github.com/Simbiat/HTMLCut/issues)AGPL-3.0-or-laterPHPPHP ^8.3

Since Mar 30Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/Simbiat/HTMLCut)[ Packagist](https://packagist.org/packages/simbiat/htmlcut)[ Docs](https://github.com/Simbiat/htmlcut)[ RSS](/packages/simbiat-htmlcut/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (10)DependenciesVersions (17)Used By (0)

This is a class to cut HTML while preserving (to an extent) HTML structure. Can be used to create previews of articles, written in HTML and stored in database, for example. Will work just as well with regular text.

Why?
----

[](#why)

This class has some benefits:

1. Preserve HTML tags, unless they are empty.
2. Preserve words.
3. Remove some orphaned punctuation signs at the end of the cut string.
4. Remove HTML tags, that you would not want in a preview (optional).
5. Limit number of paragraphs (optional).
6. Add an ellipsis if text was cut (optional).

Details on usage
----------------

[](#details-on-usage)

```
Cut(\DOMNode|string $string, int $length, int $paragraphs = 0, string $ellipsis = '…', bool $strip_unwanted = true)
```

`$string` is the text you want to cut. This argument also accepts `\DOMNode` objects, but it's not intended, that you will send them to it: this is simply a requirement due to recursive nature of the function.
`$length` is the expected maximum of the resulting text. Note, that due to words preservation result **may** be a bit longer, but normally, not by much.
`$paragraphs` is the maximum number of paragraphs in the result. In this case `paragraph` means not only text with following new line (or end of string) and `` tags, but also some other HTML tags, that are generally shown as if a new paragraph, like ``. This is useful if you want to limit the number of `lines` shown in your previews. Cutting by characters should be enough, but if the content you are sharing starts with multiple short lines (for example, a poem), this may result in a preview, that will be longer, than the rest. Setting this to a value more than `0` will help prevent that. List of tags to treat as paragraphs can be edited before calling the function by directly modifying `$paragraph_tags` class variable.
`$ellipsis` is an optional text, that you want to display after the cut text. Normally you would want this to be a link like "Read More" or something else. Defaults to unicode vertical lower ellipsis symbol `…` (not `...`).
`$strip_unwanted` if set to `true` will remove any tags, that you may not want to be shown in preview, like images and tables. List of tags to remove can be directly modified by editing `$extra_tags` class variable.
**NOTICE:** previous versions used `nl2br` when returning the string, but this was removed. If you want to "style" new lines in any way, please, use a separate function.

Example:

```
require __DIR__.'/lib/HTMLCut/src/Cut.php';
$doc = new DOMDocument();
$doc->loadHTML('Testing cutting function');
echo \Simbiat\HTML\Cut::cut($doc, 10);
exit;
```

will output:

```
Testing…
```

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance49

Moderate activity, may be stable

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity76

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~98 days

Recently: every ~213 days

Total

16

Last Release

435d ago

Major Versions

1.2.5+20250209 → 2.0.0+202504132025-04-13

PHP version history (2 changes)1.0.0+20210330PHP ^8

1.2.3+20240407PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/6022665?v=4)[Dmitrii Kustov](/maintainers/Simbiat)[@Simbiat](https://github.com/Simbiat)

---

Top Contributors

[![Simbiat](https://avatars.githubusercontent.com/u/6022665?v=4)](https://github.com/Simbiat "Simbiat (5 commits)")

---

Tags

phphtmlcut

### Embed Badge

![Health badge](/badges/simbiat-htmlcut/health.svg)

```
[![Health](https://phpackages.com/badges/simbiat-htmlcut/health.svg)](https://phpackages.com/packages/simbiat-htmlcut)
```

###  Alternatives

[artem_c/emmet

emmet implementation for php

141.8k](/packages/artem-c-emmet)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
