https://example.com/dons', $linked, 'linkUrlsInText rend les URLs cliquables avec target et rel' ); assertEquals( '<script>alert(1)</script>', linkUrlsInText(''), 'linkUrlsInText échappe le HTML injecté dans le texte' ); assertContains( 'href="https://example.com/?a=1&b=2"', linkUrlsInText('Lien : https://example.com/?a=1&b=2'), 'linkUrlsInText échappe les & dans l\'URL du lien' ); // --- Gabarits d'erreur 404.php.sample / 500.php.sample (ARC-7) --------------- foreach (['404' => '404.php.sample', '500' => '500.php.sample'] as $code => $file) { $path = $root . '/' . $file; assertTrue(file_exists($path), "$file existe"); $template = file_get_contents($path); assertContains( "http_response_code($code)", $template, "$file positionne le code HTTP $code" ); assertContains( 'noindex', $template, "$file demande la non-indexation (robots noindex)" ); assertNotContains( 'style="', $template, "$file n'utilise pas d'attribut style inline (bloqué par la CSP)" ); // Tout