sanitizeContent($svg); if ($sanitizedSvg !== $svg) { file_put_contents($targetPath, $sanitizedSvg); } } public function sanitizeContent(string $svg, bool $minify = false, bool $removeLinks = false): string { $sanitizer = new Sanitizer(); $sanitizer->removeRemoteReferences(true); $sanitizer->minify($minify); if ($removeLinks) { $sanitizer->setAllowedTags(new class implements TagInterface { public static function getTags(): array { return array_values(array_diff(AllowedTags::getTags(), ['a'])); } }); } return $sanitizer->sanitize($svg) ?: ''; } public function sanitizeNode( \DOMNode $node, ): \DOMNode { $svgSanitizer = new class extends Sanitizer { public function sanitizeDocument(\DOMDocument $document): void { $this->xmlDocument = $document; $this->setUpBefore(); // Pre-process all identified elements $xPath = new XPath($this->xmlDocument); $this->elementReferenceResolver = new Resolver($xPath, $this->useNestingLimit); $this->elementReferenceResolver->collect(); $elementsToRemove = $this->elementReferenceResolver->getElementsToRemove(); // Start the cleaning process $this->startClean($this->xmlDocument->childNodes, $elementsToRemove); $this->resetAfter(); } }; $svg = new \DOMDocument(); $svg->appendChild($svg->importNode($node, true)); $svgSanitizer->removeRemoteReferences(true); $svgSanitizer->sanitizeDocument($svg); return $node->ownerDocument->importNode($svg->documentElement, true); } }