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 :

Problème de charset avec traduction Google


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Points : 87
    Points
    87
    Par défaut Problème de charset avec traduction Google
    Bonjour à tous,

    J'essaie de faire un script qui traduit un texte grâce à Google Traduction.

    Malheureusement, j'ai un petit problème: l'accentuation semble posé problème... Pourtant, je travaille en UTF-8, Google aussi ... J'ai essayé de travailler ma page en iso-8859-15, le problème est plus ou moins similaire une fois qu'on joue avec utf8_encode/decode. J'ai aussi essayé de jouer avec utf8_encode/decode et mb_convert sur la version ut8 de la page. Je me suis dit que le problème venait peut être de l'utilisation du DomDocument, alors j'ai essayé avec file_get_contents mais je n'ai toujours pas réussi à résoudre le problème.

    Pour être plus clair, voici le code:
    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
    35
    36
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>TEST 01</title>
        <link rel="stylesheet" type="text/css" title="Design" href="css/design.css" />
      </head>
      <body><p>
    <?php
     
    $from= "fr";
    $to = "en";
    $source = "url:http://www.tv5.org/TV5Site/info/afp_article.php?idrub=15&xml=newsmlmmd.2f8b5b227cce71fce5efb88778a3bbd7.201.xml [tok] Pâte d'arachide contaminée aux USA: ouverture d'une enquête criminelle [tok] Le ministère américain de la Justice et l'Agence de réglementation de l'alimentation (FDA) ont ouvert une enquête criminelle dans l'affaire de la vaste intoxication alimentaire à la pâte d'arachide contaminée aux salmonelles, a indiqué vendredi un porte-parole de la FDA.";
     
    $new_url = 'http://translate.google.com/translate_t?langpair='.$from.'%7C'.$to.'&text='.urlencode($source).'#';
     
    	  $doc = new DOmDocument;
    	  if(@$doc->loadHTMLFile($new_url)) {   
            $h1 = $doc->getElementsByTagName("h1");
            $child = $h1->item(0);
            while ($child) {
              if($child->nodeName=='form') {
                 $div = $child->getElementsByTagName("div");
                for ($i = 0; $i < $div->length; $i++) {
                  if($div->item($i)->getAttribute('id') == 'result_box') { 
                    $tnl = $div->item($i)->nodeValue; 
                  }
                }
              }
              $child = $child->nextSibling;
            }
            $content = explode(" [tok] ", $tnl);
            print_r($content);
        }
    ?></p>
    </body>
    </html>
    Une autre version avec des comments de diverses possibilités que j'ai essayé:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
        <title>TEST 02</title>
        <link rel="stylesheet" type="text/css" title="Design" href="css/design.css" />
      </head>
      <body>
    <?php
     
    $from= "fr";
    $to = "en";
    $source = "url:http://www.tv5.org/TV5Site/info/afp_article.php?idrub=15&xml=newsmlmmd.2f8b5b227cce71fce5efb88778a3bbd7.201.xml [tok] Pâte d'arachide contaminée aux USA: ouverture d'une enquête criminelle [tok] Le ministère américain de la Justice et l'Agence de réglementation de l'alimentation (FDA) ont ouvert une enquête criminelle dans l'affaire de la vaste intoxication alimentaire à la pâte d'arachide contaminée aux salmonelles, a indiqué vendredi un porte-parole de la FDA.";
    echo $source.'<br />';
    $new_url = 'http://translate.google.com/translate_t?langpair='.$from.'%7C'.$to.'&text='.urlencode($source).'#';
        echo $new_url;
     
    	  /*$doc = new DOmDocument;
    	  if(@$doc->loadHTMLFile($new_url)) {   
            $h1 = $doc->getElementsByTagName("h1");
            $child = $h1->item(0);
            while ($child) {
              if($child->nodeName=='form') {
                 $div = $child->getElementsByTagName("div");
                for ($i = 0; $i < $div->length; $i++) {
                  if($div->item($i)->getAttribute('id') == 'result_box') { 
                    $tnl = $div->item($i)->nodeValue; 
                  }
                }
              }
              $child = $child->nextSibling;
            }
            $tnl = mb_convert_encoding($tnl, 'ISO-8859-15', 'UTF-8');
            $content = explode(" [tok] ", $tnl);
            print_r($content);
        }*/
     
        $tmp = file_get_contents($new_url);
        //$tmp = mb_convert_encoding($tmp, 'ISO-8859-1', 'UTF-8');
        /*$begin = strpos($tmp, '<div id=result_box dir="ltr">') + 29;
        $end =  strpos($tmp, '<', $begin) - $begin;
        $tmp = substr($tmp, $begin, $end);*/
        print_r($tmp);
    ?>
     
    </body>
    </html>
    J'ai beau cherché, je comprends pas... Je m'en remets à vous

  2. #2
    Membre averti Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 402
    Points
    402
    Par défaut
    Bonsoir,

    Sans parler de Google Traduction arrives-tu à gérer l'UTF-8 SANS utiliser de fonction type utf8_encode() ?

    Si ta réponse est non, alors c'est sûrement parce que tu as oublié de faire l'une des choses suivantes :
    - Mettre le meta charset à utf-8 dans la balise <head> (çà je l'ai vu dans ton script)
    - Envoyer le meta charset via la fonction header()
    - Mettre ton fichier en UTF-8 sans BOM (à l'inverse de l'ANSI)

  3. #3
    Membre régulier
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Points : 87
    Points
    87
    Par défaut
    Je ne comprends pas très bien... Mon fichier est en UTF8, le meta est là et je comprends pas le 2eme point

    edit:
    j'ai essayé en ajoutant <?php header('Content-Type: text/html; charset=utf-8'); ?> au debut du fichier, toujours le même problème

  4. #4
    Membre régulier
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Points : 87
    Points
    87
    Par défaut
    J'ai contourné en remplaçant les accents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    header('Content-Type: text/html; charset=iso-8859-15');
    function fandr($text)
    {
      if(mb_detect_encoding($text, "auto")=="UTF-8") { $text = mb_convert_encoding($text, "iso-8859-15", "auto"); echo "UTF-8"; }
      $find =   "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
      $text = strtr($text,$find,$replac);
     
     
      return $text;
    }
    ?>
    et dans le php de base: $source = fandr($source);


    Si qq1 à une autre solution, je suis preneur, parce que les caractères chinois par ex ne passeront pas avec ce code

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par Booster2ooo Voir le message
    $new_url = 'http://translate.google.com/translate_t?langpair='.$from.'%7C'.$to.'&text='.urlencode($source).'#';
    Il faut spécifier à google le charset de ton texte initial, en l'occurrence utf-8.
    Si tu reprends ton 1er bout de code et ajoute simplement ie=UTF-8 dans les paramètres de ton URL, du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $new_url = 'http://translate.google.com/translate_t?ie=UTF-8&langpair='.$from.'%7C'.$to.'&text='.urlencode($source).'#';
    Si je passe ton test en ligne de commande avec la modif en question, ça me renvoie
    contaminated peanut paste in the USA: opening a criminal investigation [ tok] The U.S. Department of Justice and the Regulatory Agency for Food (FDA) has opened a criminal investigation in the case of the vast food poisoning in peanut butter contaminated with salmonella, said Friday a door critic of the FDA.
    Et il y a d'autant moins de pbs d'accents qu'il n'y a aucun accent, vu que le texte est bien traduit en anglais ce qui n'était pas le cas avant la modif

Discussions similaires

  1. Problème de charset avec un include
    Par mims1664 dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2009, 23h20
  2. Problème de charset avec le mod_proxy_html
    Par tipou75 dans le forum Apache
    Réponses: 11
    Dernier message: 27/02/2008, 16h19
  3. Problème de charset avec un script ASP
    Par torobravo dans le forum ASP
    Réponses: 6
    Dernier message: 10/01/2008, 19h30
  4. Problème d'indexation avec Google
    Par Damouille dans le forum Référencement
    Réponses: 2
    Dernier message: 23/05/2007, 08h04
  5. Réponses: 7
    Dernier message: 26/04/2007, 13h21

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