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

Langage PHP Discussion :

Caracteres spéciaux - traitement


Sujet :

Langage PHP

  1. #1
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut Caracteres spéciaux - traitement
    Salut,

    En ajoutant un texte dans ma base de données, le navigateur m'affiche en plus du texte les caracteres spéciaux suivants entres les mots :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon&# 8237;&# 8236;nom&# 8237;&# 8236;‬est&# 8237;&# 8236;‬:
    bien sur, il faut enlever les espaces.

    que signifie ses caracteres et quelle est la fonction PHP utliser pour les nettoyer du texte dans la base et dans le navigateur ?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il vaudrait mieux se demander pourquoi tu insères sous cette forme dans ta base de données.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    tu insert la donné dans ta bdd apparemment en les encodant il faut la décoder à l'affichage...

    sinon sabotage, ca peux servir de rentrer les valeurs dans la bdd en les encodant surtout quand tu bosse avec de l'utf8 et des "caractères" comme le japonnais...

    Au final en décodant à l'affichage, c'est le serveur qui va décoder le code pour t'afficher les caractères, et même une personne par exemple dans mon cas n'ayant pas le japonnais sur son site verra les caractères correctement s'afficher...

    Enfin moi j'ai du en avoir besoin pour les langues étrangère et du coup j'ai gardé l'habitude pour tous mes sites... en cas de nouvelle langue, il est déjà prêt pour

  4. #4
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il vaudrait mieux se demander pourquoi tu insères sous cette forme dans ta base de données.
    non le texte est insérer d'une façon normal, mais le navigateur me l'affiche ainsi.

  5. #5
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Ze AzAr Voir le message
    Enfin moi j'ai du en avoir besoin pour les langues étrangère et du coup j'ai gardé l'habitude pour tous mes sites... en cas de nouvelle langue, il est déjà prêt pour
    Oui dans mon cas c'est la langue arabe.

    voila les fonctions utilisées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //------------------------------------------------------
    // traitement des données avant leur envoie dans la bdd//
    //------------------------------------------------------
        function format_data($Str)
        {
            $Str = $this->makeSafe($this->escapeStr(stripslashes($Str)));
            return $this->add_slashes(strip_tags($Str));
        }
    //------------------------------------------------------
    //      traitement du texte entré
    //------------------------------------------------------
        function format_post($Str)
        {
            $Str = $this->makeSafe($this->escapeStr(stripslashes($Str)));
            return $this->add_slashes(htmlspecialchars(trim($Str)));
        }
     
    //------------------------------------------------------
    // traitement des données avant affichage dans le navigateur  //
    //------------------------------------------------------
     
        function format_data_out($Str)
        {
            $Str = preg_replace( "#(\?|&|&)(PHPSESSID|s|S)=([0-9a-zA-Z]){32}#e", "", $Str );
            return trim(nl2br(stripslashes($Str)));
        }
    et je signale que c'est pour la premiere fois que ça se passe comme ça !

    au paravant les textes sont affichés tels qu'ils sont entrés sans caracteres speciaux.

    voila !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    sinon sabotage, ca peux servir de rentrer les valeurs dans la bdd en les encodant surtout quand tu bosse avec de l'utf8 et des "caractères" comme le japonnais...
    L'interêt de l'UTF8 est justement de pouvoir utiliser les caractères de toutes les langues.

    non le texte est insérer d'une façon normal, mais le navigateur me l'affiche ainsi.
    Il y a forcemment quelque chose dans ton code qui fait cette modification, ce n'est pas le navigateur ou la base de donnée qui produit ça.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par sabotage Voir le message
    L'interêt de l'UTF8 est justement de pouvoir utiliser les caractères de toutes les langues.


    Il y a forcemment quelque chose dans ton code qui fait cette modification, ce n'est pas le navigateur ou la base de donnée qui produit ça.
    Mon site n'utilise pas l'encodage utf-8, et le texte qui fait probleme est copier/coller depuis un journal quotidien.

    Peut-etre cela peut aider :

    http://nexuskirjutab.blogspot.com/

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    tu as le meme charset entre ton script d'insertion, ta bdd et ton script d'affichage.???

  9. #9
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Les champs "TEXT" de ma BDD sont en :

    latin1_general_ci

    et l'affichage est en charset : windows-1256

  10. #10
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    peut-etre il faut modifier/ajouter quelques à cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //---------------------------------------------------
    //------    replace  and clan  functions    ------//
    //---------------------------------------------------
     
        function makeSafe($Str)
        {
            $Str = preg_replace( "#(\?|&|&)(PHPSESSID|s|S)=([0-9a-zA-Z]){32}#e", "", $Str );
            $Str = str_replace(array("&","<",">"),array("&","<",">",),$Str);
            $Str = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*expression[\x00-\x20]*\([^>]*>#iU',"$1>",$Str);
            $Str = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*behaviour[\x00-\x20]*\([^>]*>#iU',"$1>",$Str);
            if(version_compare(phpversion(),"5.0.0", "<")){
            $Str = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*>#iUu',"$1>",$Str);
            $Str = preg_replace('#(&\#*\w+)[\x00-\x20]+;#u',"$1;",$Str);
            $Str = preg_replace('#(&\#x*)([0-9A-F]+);*#iu',"$1$2;",$Str);
            $Str = preg_replace('#(<[^>]+[\x00-\x20\"\'])(on|xmlns)[^>]*>#iUu',"$1>",$Str);
            $Str = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*)[\\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2nojavascript...',$Str);
            $Str = preg_replace('#([a-z]*)[\x00-\x20]*=([\'\"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2novbscript...',$Str);
            }
     
            $Str = preg_replace('#</*\w+:\w[^>]*>#i',"",$Str);
     
            do {
                $oldstring = $Str;
                $string = preg_replace('#</*(applet|meta|xml|blink|link|style|script|embed|object|iframe|frame|frameset|ilayer|layer|bgsound|title|base)[^>]*>#i',"",$Str);
            } while ($oldstring != $Str);
     
            return $Str;
        }

  11. #11
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    il faut un preg_replace qui traite ce cas ...

Discussions similaires

  1. [XML] Probleme de caracteres spéciaux
    Par Azonec dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/12/2005, 15h48
  2. remplacer les caracteres spéciaux
    Par roninou dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 15h26
  3. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07
  4. [DB2] supprimer les caractere spéciaux
    Par guin dans le forum DB2
    Réponses: 1
    Dernier message: 17/01/2005, 16h34
  5. Réponses: 5
    Dernier message: 21/07/2004, 19h34

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