Masterminds / Masterminds/html5-php
Traverser::node() does not handle entity references
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 1.8k
- Forks
- 122
- PR merge metrics
- No merged PRs in 30d
Description
If I manually modify a DOM document and add an entity reference, HTML5::saveHTML() does not give the same result as DOMDocument::saveHTML():
$html5 = new Masterminds\HTML5(['disable_html_ns' => TRUE]);
$dom = $html5->loadHTML('<body>');
$node = $dom->getElementsByTagName('body')->item(0);
$node->appendChild($dom->createElement('span', 'Identité'));
print $dom->saveHTML() . "\n";
print $html5->saveHTML($dom) . "\n";
outputs
<!DOCTYPE html>
<html><body><span>Identité</span></body></html>
<!DOCTYPE html>
<html><body><span>Identit</span></body></html>
This was reported in the Drupal project, which has recently switched to using this library instead of using DOMDocument to parse and serialize HTML: https://www.drupal.org/project/drupal/issues/3416204
This is because Traverser::node() does not handle XML_ENTITY_REF_NODE. Should the switch statement and rules class be extended to support this case?
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at Traverser::node() and inspect the rules class, focusing on how XML_ENTITY_REF_NODE is handled in the switch. Reproduce the provided DOM modification and compare HTML5::saveHTML() with DOMDocument::saveHTML(); done means the entity reference is preserved in the serialized output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- web-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100