Afficher une valeur sans exposer du code
Objectif : Afficher une valeur dynamique dans une page HTML en échappant son contenu.
Une valeur produite par PHP peut être affichée dans une page HTML, mais son contenu ne doit pas être interprété comme du balisage. Sans précaution, une chaîne contenant des caractères spéciaux peut modifier la page ou y injecter du code. Vous allez conserver le titre du carnet et l’afficher à un emplacement précis, avec une sortie adaptée au HTML.
Préparer une page HTML avec une valeur dynamique
À la fin de la leçon précédente, votre fichier index.php définit déjà le texte Carnet de contacts. Gardez cette définition : vous allez remplacer son affichage direct par une page HTML complète qui insère cette même valeur dans le titre principal. L’encodage déclaré dans le document et celui fourni à la fonction d’échappement sont tous les deux UTF-8.
<?php
declare(strict_types=1);
$texte = 'Carnet de contacts';
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Carnet de contacts</title>
</head>
<body>
<div class="carnet-page">
<header class="carnet-entete">
<h1><?= htmlspecialchars($texte, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></h1>
</header>
</div>
</body>
</html>Dans le navigateur, la page affiche un titre principal : « Carnet de contacts ». La réponse HTML contient le texte échappé à l’intérieur de l’élément <h1>.La déclaration stricte et le texte déjà défini restent au début de index.php. Après la fermeture de PHP, vous écrivez le document HTML normalement. À l’endroit où la valeur doit apparaître, l’expression courte <?= ... ?> exécute l’expression et insère son résultat dans le HTML ; ici, elle reçoit le résultat de htmlspecialchars. Cette organisation permet de lire la structure de la page sans confondre chaque balise HTML avec une instruction d’affichage.
Échapper le contenu avant de l’insérer
htmlspecialchars convertit les caractères qui ont une signification en HTML en entités affichables. Par exemple, le caractère < devient < dans la réponse envoyée au navigateur : le navigateur montre alors le caractère au lieu de le traiter comme le début d’une balise. L’apparence du texte ordinaire ne change pas, mais un contenu contenant des balises ne peut plus créer de nouveaux éléments HTML à cet emplacement.
Les options ENT_QUOTES | ENT_SUBSTITUTE indiquent à la fonction de traiter les guillemets simples et doubles et de remplacer les séquences de caractères invalides plutôt que de laisser une sortie mal formée. Le dernier argument, 'UTF-8', précise l’encodage utilisé pour interpréter le texte. Il correspond à <meta charset="utf-8"> dans l’en-tête HTML ; cette cohérence évite les erreurs d’affichage des accents et des caractères spéciaux.
Pour vérifier le résultat, lancez le serveur de développement comme vous l’avez fait dans la leçon sur l’environnement, puis ouvrez http://localhost:8000/index.php. Le titre apparaît dans le navigateur. Si vous consultez le code source de la réponse HTML, vous pouvez aussi vérifier que le texte se trouve bien dans l’élément h1 et que la page annonce UTF-8.
N’utilisez pas l’affichage direct d’une valeur avec print comme une méthode générale d’insertion dans une page : cela ne transforme pas ses caractères spéciaux. Dans cette leçon, vous avez placé la valeur dans le HTML en l’échappant explicitement. Les prochaines pages du carnet réutiliseront cette précaution pour les contenus affichés, notamment lorsque des données proviendront de formulaires.
À retenir
- Échappez chaque valeur au moment de l’insérer dans du HTML avec
htmlspecialchars. - Utilisez un encodage cohérent : UTF-8 dans le document et dans l’appel à la fonction.
- Insérez la valeur à l’emplacement voulu dans le HTML au lieu d’afficher toute la page comme une chaîne.
- Une valeur échappée est affichée comme du texte, même si elle contient des caractères interprétables par le navigateur.