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