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 :

Récupérer caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Points : 376
    Points
    376
    Par défaut Récupérer caractères spéciaux
    Bonsoir,

    j'ai un problème qui commence à me rendre cinglé et j'aimerais bien un coup de main.

    Je veux tout simplement lire un fichier (qui dans la pratique peut avoir plusieurs formats...txt, csv etc etc.

    Je n'ai aucun problème à lire les caractères normaux, mais pour les caractères spéciaux style é è à et les autres c'est un véritable bordel.

    Si j'ouvre le fichier en ANSI ou Latin1, alors je vois les accents (ce qui est plutôt bon signe^^)

    Sauf que, je me suis rendu compte que je ne récupérais pas les bonnes valeurs car ce que je lis dans le fichier je le fais traduire par l'api de google.

    Et pour la même phrase encodé dans la page correctement en utf8 et celle lu dans le fichier, j'ai deux traductions différentes avec des caractères qui sautent notamment.

    Mon problème n'est donc pas d'afficher des caractères en utf8 sur la page. Mais bien de récupérer le caractère réel lorsque je lis un fichier.

    Si je lis "à" je veux retourner "à"; ou éventuellement même "a" sans accent pour éviter de futurs problèmes.


    Mais tout ce que j'ai tenté est resté sans succès.


    Voici la fonction que j'utilise pour garder le bon caractère, mais qui semble ne pas être très efficace...elle ne doit rien faire aux caractères normaux et modifier les autres.

    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
     
     
    //prend un caractère et le retourne sans accent.
    function transcode($s){
      $c=ord($s);
      if($c==195){
        //si accent on renvoit chaine vide et on affiche en fonction du caaractère suivant
        return "";
      }
      if($c==160 || $c==161 ||$c==162 || $c==163 || $c==164 ||$c==165 || $c==166){
        return "a";
      }if($c==168 || $c==169 || $c==170 || $c==171){
        return "e";
      }if($c==172 || $c==173 || $c==174 || $c==175){
        return "i";
      }if($c==185 || $c==186 || $c==187 || $c==188){
        return "u";
      }if($c==178 || $c==179 || $c==180 || $c==181 || $c==182){
        return "o";
      }if($c==167){
        return "c";
      }else{
        //si char différent, on le renvoie sans modification
        return $s;
      }
    }
    L'idée étant que j'ai remarqué que tous les char spéciaux commençaient par le même code ascii 195. Lorsque je repère ce code je retourne une chaine vide, et par la suite je regarde le code suivant qui me donnera le bon caractère lors du prochain appel de la fonction avec le caractère suivant.


    Sur le papier l'algo m'a l'air bon, dans la pratique je n'ai pas de meilleurs résultats...



    Pour vous donner une idée plus précise, si j'affecte une variable php et que je la fais traduire par l'appli disons que je veuille traduire

    J'ai été salué --> L'appli va me renvoyer I was greeted ce qui est normal.

    Si je lis J'ai été salué dans un fichier, je vais obtenir " I t salu "

    Pourquoi ce résultat, parce que en réalité, il n'a pas su lire les accents. Du coup j'ai envoyé à l'appli; "J'ai t salu" et il n'a logiquement su traduire que le premier mot vu que les deux autres n'existent pas.






    Je précise bien également que le problème est de pouvoir faire face à n'importe quel type de fichier en entrée, car je ne peut pas connaître l'encodage à l'avance...


    Dans l'idéal, je voudrais une fonction comme celle que j'ai tenté qui puisse convertir tous les caractères spéciaux en leur enlevant leur accent (ou bien en le gardant mais correctement).


    Pour un exemple complet parlant, j'ai un fichier f1 en entrée avec

    A1 ou A1 est une cellule à traduire.

    J'écris en sortie un fichier f2 qui contient A1 B1 avec B1 la traduction de A1.

    A l'heure actuelle je vois bien mes accents s'écrire dans f2 donc c'est que je dois bien les lire correctement pourtant...; mais derrière la traduction me prouve que je n'envoie pas la bonne chaine à l'api. Ce qui m'énerve aussi c'est que normalement avec la fonction que j'utilise je devrais supprimer les accents, hors je les vois toujours et donc cela implique que ma fonction ne fait rien (ou passe toujours dans le else); et que, par conséquent on retombe encore sur une merdouille d'encodage que je ne vois pas...

    Un coup de main serait le bienvenue, je sature x)

    Merci à vous !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Yop,

    Tu as la fonction utf8_encode/utf8_decode sinon, à voir.

    http://us2.php.net/manual/fr/function.utf8-encode.php

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Points : 376
    Points
    376
    Par défaut
    Il me semblait l'avoir utilisé, et en regardant de nouveau, je ne l'avais pas mis au bon endroit...donc effectivement, maintenant c'est beaucoup mieux. Les accents semblent bien passer, même s'il y a quelques récalcitrants, notamment avec les doubles quotes autour. Je pense qu'il y a encore une histoire de format avec ça, mais je devrais pouvoir bidouiller quelque chose. Les signes comme € ne passent pas non plus.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Si tu peux poster ton code, ce serait cool, normalement tous les caractères (ormis les caractère chinois, arabes et autre dialecte du genre) fonctionnent.

Discussions similaires

  1. Récupérer variable (caractères spéciaux) dans une url
    Par clement106 dans le forum Langage
    Réponses: 3
    Dernier message: 11/12/2009, 18h09
  2. récupérer caractères spéciaux dans l'url
    Par thewaterkidny dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/08/2007, 10h58
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 11h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 17h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 10h23

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