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 :

Encodage UTF-8 dans formulaire et preg_replace


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut Encodage UTF-8 dans formulaire et preg_replace
    Bonjour

    J'ai du passer à l'encodage utf8 en raison de mon nouvel éditeur qui enregistre tout avec ce jeu de caractères. J'ai bien réussi à l'utiliser avec les navigateur en utilisent la balise <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">, mais là en php, sa ce corse.

    J'utilise un formulaire d'envoi d'infos et d'un fichier image, avant d'enregistré le fichier, je filtre son nom en utilisent preg_replace pour enlever les caractères accentuées. Mais avec utf8 sa ne ce passe pas bien du tout, par exemple pour un ï, j'obtien 'ei' je croi. Donc je pense bien que sa viens du jeu.
    Alors j'ai utiliser la fonction utf8_decode avant de passer la chaine à mon filtre mais là non plus sa ne va pas, le ï disparait tout simplement.
    Alors ou php est mal fichu pour géré l'encodage, d'ailleurs j'ai lu un vieille article la dessus.
    Ou bien les données du formulaires sont dans un autre encodage ..?
    Ou bien autre chose.
    A oui, j'ai lue que l'on pouvais utiliser les regex en mode UTF-8 en entourant l'expression de
    /.../u
    Mais sans succet.
    Une idée ?

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Es-tu bien du début à la fin en uft8?
    Un truc comme ca affiche quoi chez toi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <form method="post">
        <input type="text" name="text" value="&euro;&euml;&copy;&#x2661;">
        <input type="submit" name="Submit" value="Submit">
    </form>
    <?php
    echo  $_POST['text'];
    ?>
    Z.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Mon éditeur (netBeans) enregistre en UTF-8, c'est pour sa que je suis passé à cet encodage.

    Ton code m'affiche correctement les caractères:
    €ë©♡
    Dans l'input et après réception post.

  4. #4
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Donc le probleme ne vient ni du formulaire, ni du navigateur qui traite corectement le header de charset.

    Ca doit venir de ton script...
    Bon courage !
    Z.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Alors je me suis dit, et si sa venais du nom du fichier, il pourais avoir un encodage différent, qui sais ..
    Mais j'ai fait d'autre tests et sa ne marche déjà pas en passent par un input text.
    Voici le code (à enregistrer en UTF-8 bien sûr) pour ceux que sa intéresse.
    Je précise que le filtre n'est pas de moi (la bonne excuse), mais récupéré sur un site.
    Je précise aussi qu'en codage windows-1252 (avec balise meta correspondante) le filtre fonctionne, donc...

    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
    29
    30
    31
    32
    33
    34
     
    <?php
    function fileNameFilter($in) {
    	$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');
    	$replace = array ('e','a','i','u','o','c','_','');
    	return preg_replace($search, $replace, $in);
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <form method="post">
        <input type="text" name="text" value="aïda">
        <input type="submit" name="Submit" value="Submit">
    </form>
    <?php
    if(isset($_POST['text'])){
    // reception direct
    print  "reception direct <b>".$_POST['text']."</b><br/>";
    // decode utf8 puis filtre
    $dec =  utf8_decode($_POST['text']);
    $filtre = fileNameFilter($dec);
    print  "decode filtre <b>".$filtre."</b><br/>";
    // réencode après filtrage
    $filtreUtf8 = utf8_encode($filtre);
    print  "filtre encode <b>".$filtreUtf8."</b><br/>";
    // reception direct filtrée
    $filtreBase = fileNameFilter($_POST['text']);
    print  "base filtre <b>".$filtreBase."</b><br/>";
    }
    ?>

  6. #6
    Membre expérimenté Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Par défaut
    Pourquoi tu n'encode pas les données de l'input ?

    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
    29
    30
    31
    32
    33
    34
    function fileNameFilter($in) {
    	$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');
    	$replace = array ('e','a','i','u','o','c','_','');
    	return preg_replace($search, $replace, $in);
    }
    
    $html ='
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <form method="post">
        <input type="text" name="text" value="'.utf8_encode('aïda').'">
        <input type="submit" name="Submit" value="Submit">
    </form>';
    print_r($html);
    
    if(isset($_POST['text'])){
    // reception direct
    print  "reception direct <b>".$_POST['text']."</b><br/>";
    // decode utf8 puis filtre
    $dec =  utf8_decode($_POST['text']);
    $filtre = fileNameFilter($dec);
    print  "decode filtre <b>".$filtre."</b><br/>";
    // réencode après filtrage
    $filtreUtf8 = utf8_encode($filtre);
    print  "filtre encode <b>".$filtreUtf8."</b><br/>";
    // reception direct filtrée
    $filtreBase = fileNameFilter($_POST['text']);
    print  "base filtre <b>".$filtreBase."</b><br/>";
    }
    On y voit plus clair...

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

Discussions similaires

  1. [MySQL] Encodage UTF-8 dans la base
    Par karamaster dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/01/2014, 10h07
  2. [MySQL] Perte d'encodage UTF-8 dans une boucle (php-mysql)
    Par renaudjean dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 22/09/2011, 16h07
  3. Encodage UTF-8 dans client de messagerie
    Par Huntress dans le forum Langage
    Réponses: 8
    Dernier message: 21/07/2010, 09h30
  4. Encodage UTF-8 dans création de Fichier
    Par lysandra dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 28/03/2007, 01h12
  5. [DOM] Encodage UTF-8 dans fichier XML et PHP
    Par norkius dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/01/2007, 15h44

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