IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affichage de caractères spéciaux


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut Affichage de caractères spéciaux
    Bonsoir à toutes et tous

    les caractères accentués des textes provenant de ma base de données s'affichent avec un losange noir et point d'interrogation sauf lorsqu'ils sont codés avec (exemple) é .à la place de é
    par contre les textes avec caractères accentués provenant de mes scripts s'affichent correctement.

    mon serveur local : wampserver
    éditeur : dreamweaver
    navigateurs mozilla et IE

    dans tous mes scripts avec <head> j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta charset="UTF-8">
    et dans mon fichier htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddDefaultCharset utf-8
    rien n'y change ...
    si quelqu'une ou quelqu'un a une piste sérieuse elle sera bienvenue

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    c'est peut-être les réglages de la base de données qui sont à modifier.
    regardez cet article :
    https://antoun.developpez.com/mysql5/jeux-collations/

  3. #3
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut petite progression
    bonsoir

    23 pages à lire .. la doc ne manque pas d’intérêt. Les explications sont nombreuses . En lisant la page 4 , j'ai déjà oublié ce qu'il y avait en page 1 . Pas encore vraiment éclairé pour mon problème . Je la relirai .

    Ce que j'ai pu en retenir m'a conduit à effacer puis recréer ma BD en UTF8_unicode_ci.
    Le problème d'affichage des textes provenant de la BD semble avoir été résolu mais surtout avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $link -> set_charset("utf8");
    que j'ai mis dans ma config juste après la connexion .
    Ce qui me semble étrange c'est de devoir préciser set_charset UTF-8 à une base de donnée qui est déjà configurée en UTF-8 !!

    maintenant je retrouve un problème similaire avec les retours de mes fonctions en partie concaténés avec "¤" et qui ne passent pas lorsque je souhaite les récupérer ..
    la function incriminée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function getTailleQuantite($xTaille, $xQuantite, $xValue, $xIndexTab, $xPrix, $xCoef){
    	if($xQuantite > 0){
    		return "<input type='radio' name='taille_" . $xIndexTab . "' value='" . $xValue . "¤" . $xPrix . "¤" . $xCoef . "'style='border-right: 1px solid #9EF776 ; border-bottom: 1px solid #9EF776'>";}
    		else {
    			return "<input type='radio' name='taille_" . $xIndexTab . "' value='" . $xValue . "¤" . $xPrix . "¤" . $xCoef . "' >";}
     
    }

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Points : 55
    Points
    55
    Par défaut tuto utf8
    Bonjour
    Voir ce tuto et revenir nous voir
    https://j-willette.developpez.com/tu...-site-en-utf8/
    Ne pas oublier de déclarer ses scripts en UTF8 sans bom
    et la connexion sql avec mysql_set_charset( 'utf8' ); ou SET NAMES "utf8";
    Et le cache de son navigateur s'il existe....

  5. #5
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut UTF-8 suite
    Bon !!
    J'ai relu jeux et collations ce matin . Jusqu'à la page 10 .. très intéressant et compréhensible . Après, c'est devenu , pour moi, un peu confus jusqu'à la .. noyade.
    15 mn d'apnée, et lecture du tuto encoder-son-site-en-utf8 (plus accessible .. pour moi) . J'ai suivi à la lettre, configuré ma BD utf8_unicode_ci .

    ensuite j'ai repris tous mes scripts et les ai convertis , pour ceux qui ne l'étaient pas , en UTF-8 sans cocher la case BOM . Revu les textes et remplacé les caractères qui s'étaient transformés à la conversion . Une bonne partie étaient en "Europe de l'ouest".

    Lorsque j'essaie, il y a une foultitude de messages d'erreur avec la fonction preg_replace que j'utilise dans mon fichier de config qui me disent : Warning: preg_replace(): Unknow modifier 'ici le losange avec point d'interrogation" in .... . Il y a donc des caractères qu'il ne reconnait pas !!
    Tous ces messages d'erreur disparaissent lorsque je remets le fichier en encodage "Europe de l'ouest". Par contre , j'ai toujours mon problème avec ce qui me revient de mes formulaires et les fonction qui sont dans mon fichier de config ... là, ça fume ...

  6. #6
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut Au cas où
    Bonsoir mauyebo,

    En suivant les préconisations de ce billet, j'ai aussi converti (avec Notepad) mes fichiers qui apparaissaient déjà en utf-8 sans BOM et dont les caractères accentués (i.e. ceux saisis dans le fichier même) s'affichaient correctement. Et le comportement de mon application a changé (en mieux !)
    Mais bon, il y avait une circonstance aggravante : rédaction des fichiers sous Windows

    Pour les fichiers, lire avec attention les passages sur les doubles encodages et les guillemets.

    C'est aussi plus détaillé pour les bases de données - MySQL - , mais en moins de 23 pages , et - de mon point de vue - compréhensible : ceci pour les autres infortunés qui liraient ce fil et qui seraient bloqués à cette étape.

    Enfin il y a un paragraphe à la fin sur les fonctions PHP utiles, notamment pour les flux.

    Bon courage.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Warning: preg_replace(): Unknow modifier 'ici le losange avec point d'interrogation"
    Si tu obtiens ce warning après conversion c'est qu'à la base tu as fait le choix d'un délimiteur pas très catholique pour ta pattern (c-à-d en dehors de la plage ASCII). Si tel est le cas, mieux vaut en revenir à un délimiteur plus classique. D'autre part, si la pattern traite des chaînes en utf-8 ou si elle contient des caractères en dehors de la plage ASCII, tu dois ajouter le modificateur u pour qu'elle soit correctement interprétée (sinon elle sera lue octet par octet au lieu de caractère par caractère).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut délimiteur
    Citation Envoyé par CosmoKnacki Voir le message
    Si tu obtiens ce warning après conversion c'est qu'à la base tu as fait le choix d'un délimiteur pas très catholique pour ta pattern (c-à-d en dehors de la plage ASCII). Si tel est le cas, mieux vaut en revenir à un délimiteur plus classique. D'autre part, si la pattern traite des chaînes en utf-8 ou si elle contient des caractères en dehors de la plage ASCII, tu dois ajouter le modificateur u pour qu'elle soit correctement interprétée (sinon elle sera lue octet par octet au lieu de caractère par caractère).
    Le problème est que cela fonctionnait parfaitement avec le serveur et le script en php 5 . Peut être était-il plus permissif . le délimiteur que j'utilise est ¤ . avec ça je suis sûr de ne pas le retrouver dans les paramètres qui m'intéressent dans mes formules . Avec un délimiteur plus .. consensuel .. ça fonctionne . mais ça ne me convient pas vraiment . Sinon , que proposes-tu comme délimiteur "classique" ?
    Où et comment places-tu ce "u" ?

  9. #9
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut réécriture notepad++
    Citation Envoyé par Paraffine Voir le message
    Bonsoir mauyebo,

    En suivant les préconisations de ce billet, j'ai aussi converti (avec Notepad) mes fichiers qui apparaissaient déjà en utf-8 sans BOM et dont les caractères accentués (i.e. ceux saisis dans le fichier même) s'affichaient correctement. Et le comportement de mon application a changé (en mieux !)
    Mais bon, il y avait une circonstance aggravante : rédaction des fichiers sous Windows

    Pour les fichiers, lire avec attention les passages sur les doubles encodages et les guillemets.

    C'est aussi plus détaillé pour les bases de données - MySQL - , mais en moins de 23 pages , et - de mon point de vue - compréhensible : ceci pour les autres infortunés qui liraient ce fil et qui seraient bloqués à cette étape.

    Enfin il y a un paragraphe à la fin sur les fonctions PHP utiles, notamment pour les flux.

    Bon courage.
    Salut Paraffine
    J'ai téléchargé notepad++ et recopié enregistré mon fichier problématique ..(ce qui est ballot c'est que c'est le fichier config .. il est partout et tout le temps) mais , pour l'instant, .. pas de nouveau . Je vais relire ton "billet" qui, dans ma première approche, ne manquait pas d’intérêt..
    à suivre

    La théorie c'est quand on sait tout et que rien ne fonctionne, la pratique c'est quand tout fonctionne mais que l'on ne sait pas pourquoi. AE

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    ¤ (CURRENCY SIGN), c'est pas étonnant. Ce caractère est encodé sur un octet xA4 en Windows-1252 mais sur deux octets (xC2 xA4) en utf-8.
    Pour le moteur de regex le délimiteur est l'octet xC2, et légitimement, il se demande quel est le modificateur xA4 (qui n'existe pas).
    Ça n'a donc rien à voir avec une supposée permissivité plus grande de PHP 5, mais avec l'encodage de tes scripts.

    Le délimiteur que tu choisiras n'a aucune importance tant que tu évites ces caractères: . ? * + | \ ( ) [ ] { } ^ $ # < > : (car ce sont de mauvais choix) et que tu le choisis dans la table ASCII (pratiquement tout est autorisé sauf les chiffres, les lettres, les caractères blancs et le caractère NUL). Le slash ou le tilde sont de bons candidats.
    Si tu veux insérer une variable dans la pattern, passe-la d'abord par la fonction preg_quote (voir le manuel PHP).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Bonsoir,

    Ce qui fait peur avec la conversion des fichiers, ce sont des cas de double encodage. Sauvegarde first.

    @CosmoKnacki ; je ne pratique pas les preg_replace, du coup je suis curieuse de savoir ce que cela donnerait à ton avis en remplaçant le délimiteur litigieux par son code unicode \x{00A4} et le modificateur u ? Cela fonctionnerait sur de l'utf-8 ? Et planterait si on l'applique sur des données encodées en ASCII ? Merci de tes lumières - pardon si cette question est à coté de la plaque-.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    @Paraffine: Malheureusement non, ça ne fonctionnera pas pour deux raisons:
    • La séquence d'échappement \x{00a0} n'est interprétée que dans le corps de la pattern (entre les délimiteurs).
    • Quand bien même, par exemple en utilisant à la place \u{00a4} dans une chaîne entre double quotes,, elle figurerait toujours le caractère ¤ qui est encodé sur deux octets en utf-8, or le délimiteur ne doit occuper qu'un seul octet.


    Après pour pondre un délimiteur waterproof à n'importe quel ré-encodage et qui a peu de chance de rentrer en collision avec les éléments du corps de la pattern, on peut taper dans le bizarre comme des caractères de contrôle ou les octets de 80 à FF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Allez hop, on va prendre EOT (End Of Transmission)
    echo preg_replace("\x04Belette\x04", "Fouine", "Le Chat, La Belette et le Petit Lapin.");
    mais encadrer une pattern avec une séquence d'échappement ça fait un peu lourdingue quand même.

    L'ASCII c'est 128 caractères codés de 0 à 127 et la quasi totalité des encodages ont ces 128 caractères en commun, codés de la même manière, y compris utf-8.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Merci beaucoup pour ces précisions, CosmoKnacki !
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  14. #14
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut du nouveau
    Un mixage des infos de Paraffine et de CosmoKnacki , que je remercie au passage (entre autres) , a fait évoluer les choses .
    Mon script de config était en ANSI et fonctionnait .. à peu près .. avec tous les autres scripts du site ainsi que la BD en UTF-8 . bon !! pourquoi pas !!
    Lorsque je convertissais "config.php" en UTF-8 avec Notepad++ ==> message d'erreur qui ne bloquait pas tout mais faisait désordre ..
    Solution du moment conseillée par CosmoKnacki, qui a fait évoluer les choses :
    -Reconvertir config.php en UTF-8
    -remplacer le séparateur que j'utilisais ¤ (Alt Gr $) par le tilde ~(Alt Gr é + barre d'espace) .
    Exit le message d'erreur .. du moins , dans ma page d'accueil . Il me reste maintenant à remplacer ¤ par ~ dans le reste des scripts pour voir si j'arrive .. au bout .




    Tout le monde est un génie. Mais si vous jugez un poisson sur ses capacités à grimper à un arbre, il passera sa vie à croire qu'il est stupide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de caractères spéciaux
    Par clairouch dans le forum OpenGL
    Réponses: 5
    Dernier message: 22/06/2006, 11h18
  2. Outil pour l'affichage de caractère spéciaux
    Par ad1lux dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2006, 21h12
  3. Réponses: 10
    Dernier message: 31/03/2006, 20h46
  4. Affichage de caractère spéciaux absent dans le code source
    Par HNT dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 03/11/2005, 22h38
  5. problème avec l'affichage des caractères spéciaux
    Par michelkey dans le forum Général Python
    Réponses: 4
    Dernier message: 19/08/2005, 08h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo