$css = preg_replace('/<\/?style[^>]*>/i', '', $css); // Eliminar comentarios HTML $css = preg_replace('//s', '', $css); return trim($css); } private static function validate(string $css): void { // Detectar código potencialmente peligroso $dangerous = ['javascript:', 'expression(', '@import', 'behavior:']; foreach ($dangerous as $pattern) { if (stripos($css, $pattern) !== false) { throw new ValidationException("CSS contiene patrón no permitido: {$pattern}"); } } } public function validateForLoadType(LoadType $loadType): void { $maxSize = $loadType->isCritical() ? self::MAX_SIZE_CRITICAL : self::MAX_SIZE_DEFERRED; if (strlen($this->value) > $maxSize) { throw new ValidationException( sprintf('CSS excede el tamaño máximo de %d bytes para tipo %s', $maxSize, $loadType->value() ) ); } } public function value(): string { return $this->value; } public function isEmpty(): bool { return empty($this->value); } }