Accents et caractères spéciaux PHP

Sandriine Messages postés 1400 Statut Membre -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Sur mon site, j'ai un formulaire que l'utilisateur remplit, et dont les données sont envoyées sur une base MySQL. Ces données sont ensuite affichées sur le site.
Comment faire pour que les accents et les caractères spéciaux soient correctement affichés ?

Je ne m'en sors pas avec toutes les fonctions à connaitre : htmlentities, addslashes, stripslashes, htmlspecialchars...

Merci de m'éclairer sur ces fonctions.
- Quoi utiliser lorsqu'on envoi des données en POST vers une base de données,
- Quoi utiliser pour afficher des données issues de la base de données,
- Quoi utiliser lorsqu'on affiche un formulaire pré-rempli

6 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    C'est pour ça que PHP a une option "magic_quote_gpc".
    Cette directive permet d'appliquer la fonctiona addslashes sur toutes les données GPC (GET, POST, COOKIE), donc tu devras quand même faire un stripslashes. Le gros désavantage, c'est que tous les serveurs n'ont pas cette option activée, et toutes les données GPC n'ont pas forcément besoin d'être enregistrées dans une base SQL. Dans ce cas, le développeur doit faire des stripslashes. Cette fonction est obsolète depuis PHP 5.3.0 et sera supprimée en PHP6, je te conseil donc de travailler sans cette option, et annuler son effet si ton serveur l'a activé (cf. ici).

    Avec la méthode PDO::quote, tu n'as pas besoin de faire un stripslashes, ni de mettre des guillemets dans tes requêtes.

    Exemple :
    <?php 
    $pdo = new PDO('mysql:host=localhost;dbname=ta_base','root',''); 
    
    $nom = $pdo->quote($_POST['nom']); 
    $prenom = $pdo->quote($_POST['prenom']); 
    $age = (int) $_POST['age']; 
    
    $sql = 'INSERT INTO membres( 
        nom, 
        prenom, 
        age 
    ) VALUES( 
        '.$nom.', 
        '.$prenom.', 
        '.$age.')'; 
    
    $pdo->exec($sql); 
    ?>

    Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
    3
  2. cddu33 Messages postés 1349 Statut Membre 258
     
    on utilise addslach pour eviter l'insertion de code malveillant dans la base de donné.

    donc
    avant l'envoi des donné a la base de donné, on met addslah puis quand tu veu recupérer les donné tu met stripslach
    0
  3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut.

    addslahes est à utiliser lors d'une requête "INSERT INTO", pour éviter les injections SQL.
    Lorsque tu veux afficher le contenu (SELECT champs FROM table), tu dois utiliser stripslashes qui annule l'effet d'addslashes et htmlspecialschars pour éviter les failles XSS.

    Perso j'utiliser la classe PDO et la méthode PDO::quote() pour éviter les injections SQL. Je n'ai même pas besoin de faire un stripslashes et dans la requête "INSERT INTO" je ne dois pas mettre de guillemets autour des chaines.

    Ton problème d'accent ne vient peut-être pas de là. Vérifie que l'encodage de tes scripts, celui indiqué dans la meta (mets-la si tu n'en as pas) et celui de tes tables soient les mêmes.
    0
  4. Sandriine Messages postés 1400 Statut Membre 283
     
    Ok mais je trouve ça très lourd et contraignant de devoir faire des addslashes sur chaque données postées lorsqu'on fait un INSERT ou un UPDATE, et de faire des stripslashes à chaque fois qu'on veut afficher des données provenant d'une requête SELECT.

    Concernant mes problèmes d'accents je ne comprends absolument pas d'où vient ce problème puisque mes fichiers sont en ISO, la balise meta également...
    0
    1. cddu33 Messages postés 1349 Statut Membre 258
       
      essai de tout codé en utf8
      0
    2. Sandriine Messages postés 1400 Statut Membre 283
       
      Non je ne vais pas changer tout l'encodage de mon site... Ce n'est pas une solution.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sandriine Messages postés 1400 Statut Membre 283
     
    Ok merci je vais me renseigner sur cette méthode.
    Avec cette méthode, il faut également désactiver l'option "magic_quote_gpc" ?
    0