Question théorique à propos de l'insertion d'accent dans la base

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Alorsladaccord, 7 Mars 2017.

  1. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bonjour,

    Je viens de résoudre un très petit soucis technique, mais à vrai dire, je n'ai pas compris le pourquoi du comment.

    C'est simple, j'expédie un mot accentué dans une table. Je regarde dans phpMyadmin et je constate que l'accent apparaît codé.

    Donc j'utilise la fonction ut8_decode juste avant l'insertion. Et le mot apparaît bien accentué dans le tuple.

    Mais pourquoi cela ? Pourquoi la base de donnée encode-t'elle automatiquement les accents lors de l'insertion ?
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Pourquoi faire un utf8_decode avant d'enregistrer dans la base ?
    Tu peux définir ce que tu entends par "l'accent apparaît codé" ?
    Tu px regarder l'interclassement de la base de données ET des tables ?
     
  3. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Il faut que l'ensemble de la chaine soit encodé en UTF8.
    Les fichiers, les tables et la connexion avec la requete "SET NAMES utf8".
     
  4. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Salut spout,

    - Je fais un ut8_decode car j'insère par moi-même dans une table WordPress. Or, WordPress enregistre en base de donnée les mots accentués tel quel. Donc je fais pareil.
    - L'accent apparaît codé, par exemple "épaté" -> eacute;pateacute; (sauf que c'est un autre encodage, genre @e)
    - Je ne sais pas ce que tu appelles l'interclassement.

    Salut niap,
    Je n'ai pas bien compris ton assertion. Je n'ai pas créé la table, c'est une table créée automatiquement par le script WordPress lors de l'installation. Je préfère n'y rien toucher.
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    WP est en UTF8, donc tel quel c'est SANS faire de utf8_decode (ou à la limite utf8_encode si les données ne sont pas en utf8).

    Là c'est du htmlentities, rien à avoir avec l'encodage.

    https://openclassrooms.com/courses/comprendre-les-jeux-de-caracteres-e ... lassements
     
  6. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Merci pour le lien, Spout. Je finirai de lire l'article avant ma mort.
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Comme souligné par @niap, à la connexion PDO il faut faire le SET NAMES = 'UTF8';
    Tous les charsets doivent correspondre:
    - Headers HTTP
    - HTML meta charset HTML (et form encoding des fois défini)
    - Interclassement base de données ET tables
    - Connexion (set names)
    - Fichiers PHP
     
  8. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Je veux bien faire cela, mais qu'est-ce que ça fait si je ne le fais pas ?

    Dans le cas présent, je ne fais que créer un tuple dans la table post et dans ce tuple, je ne renseigne que le titre qui peut donc comporter un accent le cas échéant. Pourquoi donc se préoccuper de tout ce que @niap indique et que tu rapportes ?
     
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Si tu respectes pas tu risques d'avoir des pb d'encodage.
     
  10. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    J'ai rectifié ma dernière phrase un peu douteuse.
    Il faut donc que je fasse quelque chose comme ça ?

    $dbh = new PDO('mysql:host=localhost;dbname);
    $dbh->exec("set names utf8");

    Je pige pas.
    Il faut faire cela pour tout texte que l'on insère dans la base de données et qui comporte des accents ?
    Et ceci afin que ces accents s'affichent bien côté client ? Et pourquoi cette fonction s'applique-t'elle à la variable $dbh et non pas à la variable qui contient le texte qu'on insère ?
    Et ça date de quand une nouveauté pareille ?
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
  12. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bah, j'ai pas programmé depuis des années...

    Mais quelle est le principe de cette fonction Set names utf8, en fait ?

    C'est pour faire gagner du temps aux webmestres en encodant tout une fois pour toute à la base, sans ajouter systématiquement des utf8_encode à chaque insertion ?
    Ou c'est une fonction qui a été créée pour d'autres impératifs, par exemple pour s'adapter aux évolutions de MYSQL ?
     
  13. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
  14. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Oui, mais je ne comprends pas le rapport entre cet encodage et l'ordinateur client, donc le visiteur.
    Si j'encode dans la base, c'est encodé en ut8 une bonne fois pour toute. Peut-être que le navigateur client va ensuite transformer cet encodage en un autre. Mais pourquoi cette fonction se préoccupe-t'elle de cela ?
     
  15. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Le set names ne sert que pour la connexion entre PHP et le driver PDO.
    Le browser il affiche ce qu'on lui demande, il transforme rien.

    Bref: ton site est en UTF8, te casse pas la tête et met de l'UTF8 partout.
     
  16. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Vi...

    Et donc pour ça, j'utilise cette fonction que je place directement dans le fichier connex.php et puis fi des utf_8 encode un partout par la suite...
    $dbh = new PDO('mysql:host=localhost;dbname);
    $dbh->exec("set names utf8");
    Whoua c'est classe !

    Y'en a pas d'autres des nouvelles astuce dans le genre ?
    Par exemple un petit $dbh=exec("SANITIZE_EVERYTHING") serait de bon aloi.
     
Chargement...
Similar Threads - théorique propos insertion Forum Date
Problème théorique whois. Administration d'un site Web 28 Juin 2018
Problème de prerender théorique. Développement d'un site Web ou d'une appli mobile 11 Août 2015
Comment faire une estimation théorique des revenus AdSense d'un site Monétisation d'un site web 29 Décembre 2011
Google qui me propose les résultats de Bing Le café de WebRankInfo 18 Août 2019
Pourquoi mon patron me protège-t-il à propos de la recherche par mot clé? Demandes d'avis et de conseils sur vos sites 20 Juillet 2019
à propos de la commande site:www.monsite.fr Référencement Google 22 Juin 2019
Questions à propos d'AMP et du carrousel Référencement Google 27 Mai 2019
Structure titre pour les Commentaires / A propos de l'auteur / Article similaires Débuter en référencement 5 Mai 2019
Pourquoi Google ne propose pas la balise titre que je lui indique ? Problèmes de référencement spécifiques à vos sites 10 Avril 2019
Est-il intéressant de proposer les articles en version PDF ? Référencement Google 8 Janvier 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice