Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla consequat dictum ultrices. Cras arcu nunc, maximus eu convallis sed, aliquet at odio. Ut a sollicitudin lectus, in rhoncus metus. Sed eget sem eget metus rhoncus pellentesque faucibus sit amet felis. In suscipit neque ac erat cursus dignissim. Donec quis tortor turpis. In scelerisque urna eu est tincidunt, in varius nisi vehicula.
Sed euismod id justo at congue. Donec sit amet magna pharetra, vehicula turpis id, venenatis felis. Duis nec augue lobortis, porttitor urna pretium, mollis ligula. Pellentesque gravida enim turpis, tempus varius nunc scelerisque a. Maecenas aliquet cursus risus ut lacinia. Donec quis convallis purus. Donec semper urna non nulla mollis, eget aliquam velit ultricies. In ac nulla magna. Nulla consequat lorem vitae lectus aliquet hendrerit. Fusce sollicitudin, justo nec consequat lacinia, tortor magna rhoncus dolor, quis tempor lacus nisl in risus. Cras fermentum vulputate volutpat. Duis pulvinar cursus dui ac ornare. Nulla aliquam lacus arcu, vitae vulputate risus aliquet non. Proin risus neque, consectetur vel nulla nec, rhoncus tristique nisl. Donec tristique, eros quis euismod ultrices, ante elit cursus dui, ut tempor sapien sem nec diam. Nunc feugiat eros at massa vulputate, maximus sodales nibh sagittis.
Nunc vel volutpat turpis, at semper arcu. Aenean id velit pulvinar, aliquet tellus vitae, rutrum ante. Proin imperdiet est id elit faucibus, et tincidunt massa pharetra. Duis tempor lacus velit, sed molestie erat commodo sed. Sed fringilla sapien sit amet enim eleifend, ut semper libero posuere. Mauris luctus blandit venenatis. Duis in quam sed lectus molestie bibendum ac nec nibh. Duis tempor posuere rutrum. In quis enim in massa ultricies gravida. Maecenas vel venenatis erat, ut rutrum ligula. Vivamus mi urna, feugiat tristique laoreet sed, scelerisque a nisi. Pellentesque molestie ipsum lacinia ex condimentum mattis. Vivamus tincidunt consequat ex, et ultricies sem luctus eget. Aenean eu nunc velit. Phasellus at lorem tempor, ultrices mauris ac, vehicula felis. Mauris justo nulla, porta in nulla porttitor, eleifend mattis risus.
<?php
namespace App\Services\Article\Components;
final class ArticleFactory
{
private \DOMDocument $dom;
public function __construct(string $html)
{
$this->dom = new \DOMDocument('1.0', 'UTF-8');
libxml_use_internal_errors(true);
// Carrega o HTML uma única vez
$content = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
$this->dom->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
}
public function process(): string
{
$tags = [
'img' => Img::class,
'table' => Table::class,
'iframe' => YouTube::class,
'a' => Anchor::class,
'pre' => Code::class,
];
foreach ($tags as $tagName => $handler) {
$nodes = iterator_to_array($this->dom->getElementsByTagName($tagName));
foreach ($nodes as $node) {
// O Handler altera o $this->dom internamente por referência
$handler::handle($node);
}
}
// Retorna o HTML completo e processado
return $this->dom->saveHTML();
}
}
Nam non lorem tincidunt, elementum dolor nec, tincidunt leo. Praesent luctus orci velit, vitae volutpat urna varius viverra. Vestibulum a nulla lacus. Mauris eget diam tincidunt, sagittis velit vitae, tristique erat. Duis vulputate odio sit amet eleifend pulvinar. Maecenas scelerisque interdum porta. Aenean mollis dignissim velit, sit amet condimentum metus varius eu. Phasellus non erat sollicitudin, gravida enim vel, laoreet eros. Etiam et interdum tortor. Integer feugiat ut nibh at rutrum. Sed tincidunt ac magna a gravida. Fusce ornare, tortor ut condimentum porttitor, quam nisi blandit dolor, tincidunt scelerisque dolor dui at metus.

Nunc ullamcorper rutrum felis at egestas. In vitae dictum lectus. Mauris et tincidunt nisi. Proin ultricies tortor dui, nec feugiat odio dignissim ut. Donec risus metus, porttitor eget neque eu, congue interdum lacus. Ut auctor sit amet dui sit amet vehicula. Suspendisse sollicitudin mauris libero, sit amet tincidunt turpis hendrerit id. Aenean id congue magna, at semper lectus.

Deixe um comentário