Kevin Decherf and GitHub
a93488d727
Merge pull request #113 from Kdecherf/fix/loadHtml
...
Change visibility of Readability::loadHtml() and prevent DOM reset in init()
2.0.9
2026-07-11 21:40:14 +02:00
Kevin Decherf
ac24ef54a4
Fix php-cs-fixer
...
Signed-off-by: Kevin Decherf <kevin@kdecherf.com >
2026-07-11 21:37:25 +02:00
Kevin Decherf
76547fef78
Prevent Readability::init() from resetting DOM if already set
...
Letting init() resetting the DOM may lead to unexpected behaviors in
libraries like Graby.
Related to https://github.com/j0k3r/graby/pull/392
Signed-off-by: Kevin Decherf <kevin@kdecherf.com >
2026-07-11 21:37:25 +02:00
Kevin Decherf
228bc7ee1d
Change visibility of Readability::loadHtml() to public
...
This change is required for usecases where we want to load the DOM
without going through the whole init() process
Related to https://github.com/j0k3r/graby/pull/392
Signed-off-by: Kevin Decherf <kevin@kdecherf.com >
2026-07-11 21:37:25 +02:00
Jérémy Benoist and GitHub
35b87585e7
Merge pull request #128 from j0k3r/dependabot/composer/phpstan/phpstan-phpunit-2.0.18
...
Update phpstan/phpstan-phpunit requirement from 2.0.16 to 2.0.18
2026-07-10 09:45:01 +02:00
dependabot[bot] and GitHub
4230b2d7ca
Update phpstan/phpstan-phpunit requirement from 2.0.16 to 2.0.18
...
Updates the requirements on [phpstan/phpstan-phpunit](https://github.com/phpstan/phpstan-phpunit ) to permit the latest version.
- [Release notes](https://github.com/phpstan/phpstan-phpunit/releases )
- [Commits](https://github.com/phpstan/phpstan-phpunit/compare/2.0.16...2.0.18 )
---
updated-dependencies:
- dependency-name: phpstan/phpstan-phpunit
dependency-version: 2.0.18
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-07-10 07:26:54 +00:00
Jérémy Benoist and GitHub
85be584f94
Merge pull request #130 from j0k3r/dependabot/composer/friendsofphp/php-cs-fixer-3.95.12
...
Update friendsofphp/php-cs-fixer requirement from 3.95.11 to 3.95.12
2026-07-10 09:25:25 +02:00
Jérémy Benoist and GitHub
03a960daf0
Merge pull request #129 from j0k3r/dependabot/composer/rector/rector-2.5.5
...
Update rector/rector requirement from 2.5.2 to 2.5.5
2026-07-10 09:25:14 +02:00
Jérémy Benoist and GitHub
6f62bcf662
Merge pull request #127 from j0k3r/dependabot/composer/phpstan/phpstan-2.2.5
...
Update phpstan/phpstan requirement from 2.2.3 to 2.2.5
2026-07-10 09:24:55 +02:00
dependabot[bot] and GitHub
3e3114a492
Update friendsofphp/php-cs-fixer requirement from 3.95.11 to 3.95.12
...
Updates the requirements on [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer ) to permit the latest version.
- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases )
- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md )
- [Commits](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.95.11...v3.95.12 )
---
updated-dependencies:
- dependency-name: friendsofphp/php-cs-fixer
dependency-version: 3.95.12
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-07-10 05:35:20 +00:00
dependabot[bot] and GitHub
f98247ed14
Update rector/rector requirement from 2.5.2 to 2.5.5
...
Updates the requirements on [rector/rector](https://github.com/rectorphp/rector ) to permit the latest version.
- [Release notes](https://github.com/rectorphp/rector/releases )
- [Commits](https://github.com/rectorphp/rector/compare/2.5.2...2.5.5 )
---
updated-dependencies:
- dependency-name: rector/rector
dependency-version: 2.5.5
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-07-10 05:34:54 +00:00
dependabot[bot] and GitHub
5a6e525ff5
Update phpstan/phpstan requirement from 2.2.3 to 2.2.5
...
Updates the requirements on [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source ) to permit the latest version.
- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits )
---
updated-dependencies:
- dependency-name: phpstan/phpstan
dependency-version: 2.2.5
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-07-10 05:34:41 +00:00
Jérémy Benoist and GitHub
0de328760a
Merge pull request #126 from j0k3r/dependabot/composer/phpstan/phpstan-2.2.3
2026-07-03 07:56:04 +02:00
dependabot[bot] and GitHub
5aa9da6843
Update phpstan/phpstan requirement from 2.2.2 to 2.2.3
...
Updates the requirements on [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source ) to permit the latest version.
- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits )
---
updated-dependencies:
- dependency-name: phpstan/phpstan
dependency-version: 2.2.3
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-07-03 05:34:19 +00:00
Jérémy Benoist and GitHub
1bb7eec83c
Merge pull request #125 from j0k3r/dependabot/composer/rector/rector-2.5.2
...
Update rector/rector requirement from 2.4.6 to 2.5.2
2026-06-26 08:58:17 +02:00
Jérémy Benoist and GitHub
049bd07074
Merge pull request #124 from j0k3r/dependabot/composer/friendsofphp/php-cs-fixer-3.95.11
...
Update friendsofphp/php-cs-fixer requirement from 3.95.8 to 3.95.11
2026-06-26 08:58:05 +02:00
dependabot[bot] and GitHub
ca1b105f40
Update rector/rector requirement from 2.4.6 to 2.5.2
...
Updates the requirements on [rector/rector](https://github.com/rectorphp/rector ) to permit the latest version.
- [Release notes](https://github.com/rectorphp/rector/releases )
- [Commits](https://github.com/rectorphp/rector/compare/2.4.6...2.5.2 )
---
updated-dependencies:
- dependency-name: rector/rector
dependency-version: 2.5.2
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-26 05:34:17 +00:00
dependabot[bot] and GitHub
5ad159ebb1
Update friendsofphp/php-cs-fixer requirement from 3.95.8 to 3.95.11
...
Updates the requirements on [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer ) to permit the latest version.
- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases )
- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md )
- [Commits](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.95.8...v3.95.11 )
---
updated-dependencies:
- dependency-name: friendsofphp/php-cs-fixer
dependency-version: 3.95.11
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-26 05:34:09 +00:00
Kevin Decherf and GitHub
1312ffbced
Merge pull request #123 from Kdecherf/fix/singletag-type-error
...
Fix a TypeError when tidy is disabled
2026-06-23 14:12:03 +02:00
Kevin Decherf
266e36c187
Fix a TypeError when tidy is disabled
...
A logic tries to replace a node with its child node if it is the only
element of the node. However in some cases, especially when tidy is
disabled, children items other than DOMElement may survive (e.g.
DOMComment), leading to a TypeError.
Fixes #122
Signed-off-by: Kevin Decherf <kevin@kdecherf.com >
2026-06-22 15:51:06 +02:00
Kevin Decherf and GitHub
a8b08d8cb2
Merge pull request #114 from Kdecherf/fix/array-filter
...
Fix "Undefined array key 0" error
2026-06-21 22:46:10 +02:00
Kevin Decherf
7db754debe
Fix "Undefined array key 0" error
...
If a matching element isn't the first child (e.g. preceded by a whitespace
text node), it may sit at a key other than 0 after some cleanup, leading to
a "Undefined array key 0" error.
This fix is now covered by 6 tests.
Fixes #96
Signed-off-by: Kevin Decherf <kevin@kdecherf.com >
2026-06-21 17:06:38 +02:00
Jérémy Benoist and GitHub
18bfe842f8
Merge pull request #121 from j0k3r/dependabot/composer/friendsofphp/php-cs-fixer-3.95.8
...
Update friendsofphp/php-cs-fixer requirement from 3.94.2 to 3.95.8
2026-06-19 10:18:22 +02:00
dependabot[bot] and GitHub
63a0db9109
Update friendsofphp/php-cs-fixer requirement from 3.94.2 to 3.95.8
...
Updates the requirements on [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer ) to permit the latest version.
- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases )
- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md )
- [Commits](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.94.2...v3.95.8 )
---
updated-dependencies:
- dependency-name: friendsofphp/php-cs-fixer
dependency-version: 3.95.8
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-19 08:08:54 +00:00
Jan Tojnar
63d6ef1a47
.github: Set up Dependabot
...
This will make GitHub check dependencies in `composer.json` once a week
and open PRs trying to bump each of them whenever a new version is released.
If the CI fails, as is likely the case with PHP-CS-Fixer, we will need
to fix is manually before the PR can be merged.
https://docs.github.com/en/code-security/tutorials/secure-your-dependencies/dependabot-quickstart
2026-06-19 10:05:13 +02:00
Jan Tojnar
116b6c839a
JSLikeHTMLElement: Add types to methods
...
PHP-CS-Fixer 3.95.0 added `void_return` rule to `@Symfony:risky` ruleset.
https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/tag/v3.95.0
https://cs.symfony.com/doc/rules/function_notation/void_return.html
`void` type declaration is available since PHP 7.1:
https://www.php.net/manual/en/language.types.void.php
Magic methods can have type annotations but they must be compatible with the default ones
(not enforced prior to PHP 8.0):
https://php.watch/versions/8.0/magic-method-signatures
Let’s just type all the methods.
This could technically be a BC break if someone is extending
the `JSLikeHTMLElement` class, overriding the methods that previously
did not have return type hint without adding it, and calling
`registerNodeClass` on the public `dom` property but I think it is
pretty unlikely – at least there seem to be no public instances on GitHub.
2026-06-19 10:00:39 +02:00
Jan Tojnar
a35f00ebb3
php-cs-fixer: Prevent removing strict_types declaration
...
PHP-CS-Fixer 3.95.0 started removing the declarations as a part of
`@Symfony:risky` ruleset.
We currently only use it in `rector.php` but it works there so no point
in following Symfony code style on that.
We will probably want to enable `strict_types` globally eventually,
but let’s at least stop removing them for now so that we can bump
PHP-CS-Fixer.
https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/tag/v3.95.0
https://cs.symfony.com/doc/rules/strict/declare_strict_types.html
2026-06-19 09:51:35 +02:00
Jan Tojnar
0f9f971556
tests: Use class constants instead of strings
...
Fixed using `composer rector` and then `composer fix`:
https://getrector.com/rule-detail/string-class-name-to-class-constant-rector
2026-06-19 09:50:01 +02:00
Jan Tojnar
fd1eaf61a7
composer: Stop using lock file
...
Since we are a library that supports wide range of PHP versions,
we cannot lock into a single set of versions of run-time dependencies.
https://getcomposer.org/doc/02-libraries.md#lock-file
Composer 1.10.0 introduced `lock` option to prevent generation of `composer.lock` file:
https://github.com/composer/composer/releases/tag/1.10.0
https://getcomposer.org/doc/06-config.md#lock
This will basically make `composer install` work the same way as `composer update`.
2026-06-19 05:36:17 +02:00
Jan Tojnar
3e40d78a67
Pin development dependencies
...
PHP-CS-Fixer, PHPStan and Rector regularly introduce changes which break CI
in minor versions, forcing us to mix unrelated changes with CI fixes.
Let’s pin the minor version and update it on our own time e.g. with Dependabot.
This is also what PHPStan suggests for projects not using `composer.lock`:
https://phpstan.org/user-guide/backward-compatibility-promise#minimizing-impact-of-type-inference-changes
2026-06-19 05:17:48 +02:00
Jérémy Benoist and GitHub
03533f5e4f
Merge pull request #111 from j0k3r/fix/tidy-php85
...
Fix bad encoding for `tidy_repair_string`
2.0.8
2026-03-27 20:34:19 +01:00
Jeremy Benoist
009b4ab9b8
Add PHP 8.5 on CI
2026-03-27 20:31:52 +01:00
Jeremy Benoist
f9e73fb49a
Fix bad encoding for tidy_repair_string
...
Tidy on PHP 8.5 is more restrictive on what can be given as input encoding. Before, it worked as an unknown value was converted to `utf8`.
2026-03-27 20:29:09 +01:00
Jérémy Benoist and GitHub
3042990efc
Merge pull request #106 from jtojnar/encode
...
Fix character decoding regression when `title` precedes `meta[charset]`
2.0.7
2025-06-03 09:22:21 +02:00
Jan Tojnar
8b89d70b1a
Fix character decoding regression when title precedes meta[charset]
...
Because of PHP 8.2 deprecation, in f14428e4c0 , we stopped converting non-ASCII characters to HTML entities. Instead, we started to explicitly insert `meta[charset]` tag at the start of the document.
Later, we discovered that was breaking `html[lang]` so, in efbbc86df9 , we made the insertion smarter. One of the improvements was that it would not insert the `meta[charset]` tag when it was already present.
That, however, broke websites that had `title` tag before `meta[charset]`. On those, libxml2 would decode the `title` contents as ISO-8859-1.
We could improve the logic (e.g. check that there is not text content before `meta[charset]`) or insert the tag unconditionally but it will probably be simplest to just go back to converting the non-ASCII characters to entities, just using non-deprecated function variant.
2025-05-28 01:10:59 +02:00
Jan Tojnar
3e9b15db46
tests: Check encoding was preserved in testHtmlLang
...
The fix introduced in efbbc86df9 alongside this test also manipulates `meta[charset]` but we were not checking if it does not break encoding.
2025-05-28 00:51:49 +02:00
Jérémy Benoist and GitHub
7413a38ff0
Merge pull request #104 from jtojnar/html-shadowing
...
Fix discarding `html[lang]`
2.0.6
2025-03-04 10:20:28 +01:00
Jérémy Benoist and GitHub
a18cd0f2a9
Merge pull request #102 from jtojnar/local-no-domain
...
Do not set domainRegExp for local files
2025-03-04 10:20:15 +01:00
Jan Tojnar
efbbc86df9
Fix discarding html[lang]
...
`DOMDocument::loadHTML` will parse HTML documents as ISO-8859-1 if there is no `meta[charset]` tag. This means that UTF-8-encoded HTML fragments such as those coming from JSON-LD `articleBody` field would be parsed with incorrect encoding.
In f14428e4c0 , we tried to resolve it by putting `meta[charset]` tag at the start of the HTML fragment. Unfortunately, it turns out that causes parser to auto-insert a `html` element, losing the attributes of the original `html` tag.
Let’s try to insert the `meta[charset]` tag into the proper place in the HTML document.
We do not need to use the same trick with `JSLikeHTMLElement::__set`.
That expects smaller HTML fragments, not `html` documents, so creating `html` and `head` elements will not be a problem.
2025-03-04 01:51:34 +01:00
Jan Tojnar
541fab34a0
tests: Remove pointless debug assignment
...
It is unused since 8ab7d76cd5 .
2025-03-03 23:55:32 +01:00
Jan Tojnar
90869d877e
tests: Use ::class for DOMDocument class name
...
Also capitalize it properly.
2025-03-03 23:53:33 +01:00
Jan Tojnar
c7208f6ad2
Do not set domainRegExp for local files
...
`parse_url($this->url, \PHP_URL_HOST)` will return `null` for local filesystem path.
Casting it to `string` will produce an empty regular expression,
which would match any link when computing link density.
2025-03-03 23:26:30 +01:00
Jérémy Benoist and GitHub
4258559b8a
Merge pull request #100 from jtojnar/phpunit-bridge7
...
composer: Allow phpunit-bridge 7.0
2.0.5
2025-02-24 09:50:46 +01:00
Jan Tojnar
1ac761d708
composer: Allow phpunit-bridge 7.0
2025-02-24 09:47:14 +01:00
Jérémy Benoist and GitHub
d3053fbce4
Merge pull request #99 from jtojnar/phpstan2
...
phpstan: Upgrade to version 2
2025-02-24 07:37:59 +01:00
Jan Tojnar
4c929754e9
phpstan: Upgrade to version 2
...
https://github.com/phpstan/phpstan/blob/2.1.x/UPGRADING.md
Required also bumping Rector since it uses PHPStan internally.
2025-02-23 02:49:08 +01:00
Jan Tojnar
1d7cdf3a12
phpstan: Use standard config path
...
This allows developer to create their own own config file, e.g. for setting `editorUrl`:
https://phpstan.org/user-guide/output-format#opening-file-in-an-editor
2025-02-23 02:46:57 +01:00
Jérémy Benoist and GitHub
f825dcf55a
Merge pull request #90 from jtojnar/foreaches
...
Iterate node lists with foreach
2.0.4
2024-10-11 08:56:35 +02:00
Jan Tojnar
9a9373de4b
Iterate node lists with foreach
...
`DOMNodeList` implements `Traversable`.
There are some `for` loops left but we cannot simply replace those:
PHP follows the DOM specification, which requires that `NodeList`
objects in the DOM are live. As a result, any operation that removes
a node list member node from its parent (such as `removeChild`,
`replaceChild` or `appendChild`) will cause the next node
in the iterator to be skipped.
We could work around that by converting those node lists to static arrays
using `iterator_to_array` but not sure if it is worth it.
2024-10-10 09:01:45 +02:00
Jan Tojnar
d454c3a462
Remove dead iteration code
...
This was forgotten in b580cf216d .
2024-10-10 09:01:45 +02:00