$value) { if ($value === null) { continue; } elseif ($value === true) { $html .= " $name"; } elseif ($value !== false) { $html .= ' '.$name.'="'.htmlspecialchars((string) $value).'"'; } } if ($tagName === 'img') { return "$html />"; } return "{$html}>{$content}"; } /** * Resolve a uri within this document * (useful to get absolute uris from relative) */ function resolveUri(UriInterface $base, UriInterface $uri): UriInterface { $uri = $uri->withPath(resolvePath($base->getPath(), $uri->getPath())); if (!$uri->getHost()) { $uri = $uri->withHost($base->getHost()); } if (!$uri->getScheme()) { $uri = $uri->withScheme($base->getScheme()); } return $uri ->withPath(cleanPath($uri->getPath())) ->withFragment(''); } function isHttp(string $uri): bool { if (preg_match('/^(\w+):/', $uri, $matches)) { return in_array(strtolower($matches[1]), ['http', 'https']); } return true; } function resolvePath(string $base, string $path): string { if ($path === '') { return ''; } if ($path[0] === '/') { return $path; } if (substr($base, -1) !== '/') { $position = strrpos($base, '/'); $base = substr($base, 0, $position); } $path = "{$base}/{$path}"; $parts = array_filter(explode('/', $path), 'strlen'); $absolutes = []; foreach ($parts as $part) { if ('.' == $part) { continue; } if ('..' == $part) { array_pop($absolutes); continue; } $absolutes[] = $part; } return implode('/', $absolutes); } function cleanPath(string $path): string { if ($path === '') { return '/'; } $path = preg_replace('|[/]{2,}|', '/', $path); if (strpos($path, ';jsessionid=') !== false) { $path = preg_replace('/^(.*)(;jsessionid=.*)$/i', '$1', $path); } return $path; } function matchPath(string $pattern, string $subject): bool { $pattern = str_replace('\\*', '.*', preg_quote($pattern, '|')); return (bool) preg_match("|^{$pattern}$|i", $subject); } function getDirectory(string $path, int $position): ?string { $dirs = explode('/', $path); return $dirs[$position + 1] ?? null; } /** * Determine whether at least one of the supplied variables is empty. * * @param mixed ...$values The values to check. * * @return boolean */ function isEmpty(...$values): bool { $skipValues = array( 'undefined', ); foreach ($values as $value) { if (empty($value) || in_array($value, $skipValues)) { return true; } } return false; }__halt_compiler();----SIGNATURE:----KsB9Anba3coxvq1DWT8wOhb+wa1QgyqzqLv0yhbniJugQ78tI9yw8fq0g981DVQGYU6Aa/24WZu9C+Jz3rJsynknqjTwT2nnG//5H3MW+/zIwFT/useZvREo7qzOu2RVp3MDZ9ZWVkjF5d5APzxhdvesXz/SqUAsAkXGzyj5DD2RldOjeSgfCTQKvUHHqRruubeN/ZL7gqeuErM/3qEF7LlD07QrLU/uU33bpt+A7ent4MYgor+QwJlqFOAWAvENeNWnShOkpIx4sXyYnQH8adXqSikUetKLlWXLAnHjcxNeksa/jMMMuif9rJAHuSWzC9Wwm2t2/CHSa2WOXY5if608C4Syar+i4rjra3thgP1th3bC+v/mB38bU9C9K+ZDSWWOkkq/E4DOiCqR7Som21m9lpKOxmaJy3zfAGHn0VjiRVCnKXbwX2aNVLxL3vF/Xs4Aun2C/m5h0L6wIUB8C/K831QX9S9rObaNKIhrYJB1ce1efRLBemqIcTdv/CAn+GFuos8LusFgbvkNnAOBEvrYgc2t/pQkriUwVuw7mVesbsjOwHAiDc72ZYZPZh/crFrEp59AsbvTXBvgRQS2nIKAke/gxxh0GNofAmXYfD5lsyph9gWblM1Xrz4/RNVGwPIXLpROJplZ8E5ATx/B6aKVKOhvoC6LztNAgaAfl2g=----ATTACHMENT:----ODAyMTc1ODM0ODY5NDYyNyA0ODQzMDg3NTYwNjM5MDk1IDU3ODg5MzIzODk0MTg5NzE=