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 :

PB d'encodage et d'antislash


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut PB d'encodage et d'antislash
    Bonjour.

    J'ai la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function pages($chaine, $a){
    	if($a == "e"){
    		$chaine = mysql_real_escape_string(htmlentities($chaine));
    	}
    	elseif($a == "d"){
    		$chaine = stripslashes(html_entity_decode($chaine));
    	}
    	return $chaine;
    }
    En gros, si je fait pages("Mon texte", "e"); le texte sera encoder, et à l'inverse décoder si le e devient d.

    Le problème est double : Problème d'encodage (é & co :@), et pb d'antislash (N\\\' & co :@ sans compter du coup des \r et des \ de partout =_=)

    Là j'en ai trop marre, je bosse depuis je ne sais combien de temps la dessus, c'est vraiment la merde...

    Je précise que j'utilise cette fonction pour encoder un texte dans une base de donnée, et pour à l'inverse afficher le contenu de la base de donnée...

    Je précise aussi (mais vous l'aurait sûrement compris) que ma base de donné ainsi que mes pages sont en UTF-8...

    Merci d'avance pour votre aide...

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Salut,

    pour t'es triples antislash regarde du côté de MAGIC_QUOTES.

    Si magic quote est activé lors d'un envoi via un formulaire il backslashe automatiquement.

    MAGIC QUOTE
    c'est => c\'est

    ensuite mysql_real_escape_string backslashe le backslashe et la cote donc
    c\'est => c\\\'est

    Donc désactive le.

    Si tu n'as pas accès à ton php.ini par ton fichier .htaccess
    => SetEnv MAGIC_QUOTES 0

    /*--------------------------------------------------*/

    Pour ce qui est de l'encodage =>

    http://j-willette.developpez.com/tut...-site-en-utf8/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Cela explique tout...

    Si tu n'as pas accès à ton php.ini par ton fichier .htaccess
    => SetEnv MAGIC_QUOTES 0
    Je le met où ?

    Et merci pour l'encodage, je vais tout essayer...

    EDIT :

    Pour l'encodage, j'ai :
    1. Au niveau du document HTML, ok
    2. Au niveau du fichier, ok
    3. Au niveau du serveur, via PHP (header), ok
    4. Au niveau du serveur, via PHP (utf8_decode), ok
    5. Au niveau de la base de données (tables + champ + BDD), ok
    6. Au niveau de la base de données (@mysql_query('SET NAMES "utf8"'); ), ok


    Pourtant, j'ai toujours ce pb d'encodage...

    Voilà la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function pages($chaine, $a){
    	if($a == "e"){
    		// encodage de la page
    		$chaine = utf8_decode(mysql_real_escape_string(htmlentities($chaine)));
    	}
    	elseif($a == "d"){
    		// decodage de la page
    		$chaine = stripslashes(html_entity_decode($chaine));
    	}
    	return $chaine;
    }
    Rien a bougé au résultat...

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Il te faut créer un fichier .htaccess
    dans ce fichier tu ajoutes la ligne suivante
    SetEnv MAGIC_QUOTES 0

    Pour ce qui est de ton problème d'encodage:

    si tu as fait toutes les manips du tuto tu ne devrais plus avoir besoin d'utiliser la fonction utf8_decode logiquement (Me corriger si ce n'est pas le cas).
    Et je ne peux pas non plus te certifié que ça corrigera ton problème

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    J'ai fait le .htaccess : Aucun changement =_=

    Pour l'encodage, j'ai enlever le utf8_decode, c'est pareil...

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Peux tu créer un fichier phpinfo et regarder dans CORE la valeur de la directive suivante :
    - magic_quotes_gpc

    car je pense que ton problème d'antislash vient de là.

    Pour ce qui est de l'encodage, les accents sont t'ils enregistrés correctement dans la base ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Et mince... magic_quotes_gpc est effectivement sur On et pourtant j'ai mis le .htaccess =_=

    Pour l'encodage, les accents sont encodés en HTML mais en ISO =_= genre : "é" =_=

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Les données enregistrées dans une base doivent être à l'identique de la saisie.

    Donc & ne doit pas devenir &

    Pourquoi ?

    Imaginons un titre de 20 caractères max : Developpez & compani (Faute volontaire)

    Notre titre fait bien 20 caractères mais lorsque tu l'enregistrera tu obtiendra :
    Developpez & com
    Donc à la sortie => Developpez & com

    Il faut donc éviter htmlentities sur une insertion de donnée, tu utiliseras donc à la sortie => htmlspecialchars (Identique à htmlentities il me semble, question d'habitude).


    Pour le magic_quote si tu es sur WAMP clique gauche,
    PHP => PHP settings => Magic quotes gpc

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Alors ok pour le htmlentities, je l'enlève...

    Par contre je ne suis pas sous WAMP mais sur 1&1 =_= Comment faire pour enlever cette option ?

  10. #10
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    normalement si tu a bien construit ton site tu as déclaré en meta ou avec le header que tu est en utf-8 ?

    sachant celà le navigateur n'a pas besoin de la notation html des caractères spéciaux pour afficher correctement ton texte.

    conclusion: normalement tu ne devrais pas avoir besoins de traduire tes chaînes avec htmlentities().

    ça devrais te simplifier la tâche.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Si mutualisé je pense que la solution sera sur le fichier .htaccess

    Essaie ça
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    chez 1&1

    Sur serveur dédié dans ton fichier php.ini

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Plus de PB d'accent et d'encodage (oui je l'ai mis dans le header), plus qu'un gros pb d'antislashes...

    Donc voila ma fonction à présent (je sais, la partie "e" ne sert à rien, je l'enléverais à la fin...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function pages($chaine, $a){
    	if($a == "e"){
    		// encodage de la page
    		$chaine = mysql_real_escape_string($chaine);
    	}
    	elseif($a == "d"){
    		// decodage de la page
    		$chaine = stripslashes(html_entity_decode(nl2br($chaine)));
    	}
    	return $chaine;
    }
    Et le .htaccess ne donne toujours rien malheureusement...

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Citation Envoyé par DevArt Voir le message
    Si mutualisé je pense que la solution sera sur le fichier .htaccess

    Essaie ça
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    chez 1&1

    Sur serveur dédié dans ton fichier php.ini
    Résultat : Internal Server Error

    :s

    P.S : oui c'est un mutualisé et non un dédié

  14. #14
    Membre éclairé
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Y'a la solution de passer par PHP, mais personnellement je trouve ça lourd.

    Jete un œil ci-dessous =>
    http://www.developpez.net/forums/d67...ic_quote-11-a/


    Je regarder tout de même si tu ne pourrais pas plutôt passer par le .htaccess.

    Je sais que chez OVH c'est possible, je ne connais pas chez 1&1

  15. #15
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    dites ...

    vous avez essayé de modifier par le biais de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set("magic_quotes_gpc", FALSE)
    ?

    juste comme ça.
    sinon je ne vois que retirer mysql_real_escape_string();

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Citation Envoyé par hiul dragonfel Voir le message
    dites ...

    vous avez essayé de modifier par le biais de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set("magic_quotes_gpc", FALSE)
    ?

    juste comme ça.
    sinon je ne vois que retirer mysql_real_escape_string();
    Non... On le met dans le .htaccess ça aussi ou dans un fichier php dirrectement ?
    Et retirer le mysql_real_escape c'est comme dire aux hacker "Venez bousiller mon site mes petits c'est facile " XD

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    C'est bon pb réglé grâce au lien que vous m'avez donné plus haut.

    Même si c'est un peut lourd, ça marche, c'est l'essentiel...

    Merci à tous pour votre précieuse aide...

    EDIT : juste un dernier problème, quand j'affiche le contenu de ma base de donnée, j'ai à la place des retour a la ligne des rnrnrn (au lieu de \r\n\r\n)... Toujours est-il que ça ne marche plus pour les sauts de ligne, et ceux malgré le nl2br lors de l'affichage

    EDIT 2 : Les retour à la ligne se font, mais il y a quand même les rnrn qui s'affiche (car comme plus de slash, ça devient un caractère... Comment les enlever SVP ?

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

Discussions similaires

  1. Encodage de caracteres: eviter 81, 8D, 8F, 90, 9D ->
    Par Fladnag dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2004, 11h17
  2. Encodage de cd en fichier mp3
    Par clovis dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 08/04/2004, 01h13
  3. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37
  4. Encodages DOS et Windows
    Par Aramis dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2003, 17h55
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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