Placer htmlspecialchars dans script php

Bonjour,

Je viens de placer mes mes scripts sur un autre serveur (infinityfree), mais ceux-ci n'affichent pas les caractères spéciaux.

J'ai vu qu'on utilise la fonction :

function htmlspecialchars(
    string $string,
    int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null,
    bool $double_encode = true
): string

Mais où la placer ? Uniquement dans l'index.php ou tous les scripts ? Et à quel endroit ?

Merci

5 réponses

  1. Bonjour,

    Il serait préférable de continuer sur l'ancienne discussion, parce que le contexte et l'historique ont leur importance.

    Concernant htmlspecialchars, son rôle est de nettoyer/sécuriser un texte avant de l'enregistrer dans une BDD, cette fonction ne fera rien sur problème d'accents suite à une migration d'hébergeur.

    Donc pour mieux comprendre, il serait déjà utile de savoir si le problème touche le texte présent en BDD, ou si ça concerne tout le texte de la page.


    0
    1. Bonjour,

      Les fonctions htmlspecialchars ou htmlentities, comme leurs noms l'indiquent, sont à utiliser lors de l'affichage de données dans un document html.

      Contrairement à une mauvaise pratique malheureusement courante, il ne faut pas utiliser htmlspecialchars avant l'enregistrement en bdd car ceci va poser d'autres problèmes sur le traitement des données en bdd.
      Plus d'info : zestedesavoir.com/articles/2489/ne-pas-confondre-faille-par-injection-sql-et-faille-xss/

      Si le problème d'affichage des caractères spéciaux provient des données présentes dans la bdd, le problème vient souvent du charset de la connexion à la bdd.
      Il faut simplement définir le charset après la connexion, via set_charset avec mysqli ou dans le DNS avec PDO (cf. premier commentaire sur la doc) :

      www.php.net/manual/fr/mysqli.set-charset.php
      www.php.net/manual/fr/pdo.construct.php
       

      0
      1. Ben j'y arrive pas ! Pourtant, je l'ai déjà fait, mais je ne me rappelle plus où.

        <center><br><br>
        Ce site présente une généalogie des branches <b>HUMBERT, DAMERON ,DAQUIN</b> et <b>MALFOI</b>
        <br>Pour raison de confidentialité, ne seront présentés que les années de naissance < année actuelle - 110.<p>
        Le nom <b>DAQUIN</b> était écrit <b>DACQUIN</b> ou <b>D'ACQUIN</b> jusqu'au milieu du XVIII° siècle.<br>
        Le nom <b>MALFOI</b> était écrit <b>MALFOY</b> jusqu'au milieu du XIX° siècle.
        
        <BR><BR><BR>
        Cette généalogie se compose de :
        
        <?php   include ('connexion/connexion.php'); 
           
        $date = date("Y");
        $date2 = $date-110;
         
        $query = 'SELECT count(id) FROM individus WHERE (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; 
        $result = mysql_query($query) or die (mysql_error()); 
        $resultat=mysql_fetch_row($result); 
        
        echo "$resultat[0] individus<p>dont<br>";
        
        $query2 = 'SELECT count(id), MIN(RIGHT(date_naissance, 4)) AS date FROM individus WHERE famille LIKE "%HUMBERT%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; 
        $result2 = mysql_query($query2) or die (mysql_error()); 
        $resultat2=mysql_fetch_row($result2); 
        $row2 = mysql_fetch_array($result2);
        
        echo "$resultat2[0] individus dans la branche xxxxxx <br>"; 
        echo ''.$row2['date'].'';
        ?>
        
        Elle a été préparée et éditée par : 
        <p>XXXXXXX &nbsp;&nbsp; <br>
        N'hésitez pas à me contacter .....
        0
        1. En fait, ce sont les é, les  è et les à qui sont remplacés par �

          J'essaye d'utiliser str_replace, mais .............????

          0
          1. Modérateur

            Bonjour,

            Comme signalé plus haut les problèmes d'accents peuvent être liés au charset de la base. Et quand on déplace une base, ce peut être lié à la base d'origine, à la procédure d'export, à la procédure d'import et au paramétrage de la base finale. Je n'ai jamais touché à cela sur Mysql, mais c'est un soucis que je rencontrais aussi sur les bases Oracle.

            Et ne pas oublier le charset des pages internet.

            <!DOCTYPE html>
            <html lang="fr">
            <head>
            <meta charset="utf-8">
            0