Comment décoder ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par dorian53, 22 Janvier 2008.

  1. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    Bonjour,

    Quel est l'encodage de cette chaîne (je souhaiterais la ressortir en ISO) ?

    Au lieu de

    J'ai testé les utf8_encode() et utf8_decode() mais sans succès.

    Cette chaîne provient d'un filename issue d'un fichier Zip à l'aide Zlib.

    Merci.
     
  2. yannouk
    yannouk WRInaute passionné
    Inscrit:
    11 Octobre 2003
    Messages:
    1 559
    J'aime reçus:
    0
    j'ai un vague souvenir d'avoir utilisé "base64_decode() ou un truc du genre. Tu peux toujours testé mais vraiment, je garantis rien :)
     
  3. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1

    Catastrophique dans les 2 sens (encode et decode), lol.

    Merci tout de même :)
     
  4. h4ni
    h4ni WRInaute occasionnel
    Inscrit:
    11 Juillet 2005
    Messages:
    427
    J'aime reçus:
    0
    essaye utf8_decode()
     
  5. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
     
  6. raljx
    raljx WRInaute passionné
    Inscrit:
    10 Juillet 2006
    Messages:
    2 022
    J'aime reçus:
    0
    nan! sert a codé une chaine en mime base64 mais pourtant cela ressemble fortement a de l'utf-8 . Comment traites tu ce fichier ?
     
  7. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    Aucune idée, je récupère cette variable sans connaitre le traitement qu'elle subit auparavant (la librairie est trop importante).
     
  8. raljx
    raljx WRInaute passionné
    Inscrit:
    10 Juillet 2006
    Messages:
    2 022
    J'aime reçus:
    0
    j'ai testé tous les charset possibles sans succés reste cette solution qui fonctionne (dans le cadre d'une page en charset=utf-8 )
    Code:
    $file = 'Fichier accentuÐ’.txt';
    $file = str_replace('Ð’','é',$file);
    echo utf8_decode($file);
    
     
  9. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    Oké merci.

    Mais j'ai un truc trop curieux.

    Code:
    echo 'Fichier accentuÐ’.txt';
    Drôle de caractère.

    En fait le problème est tout simple :
    - Je crée un fichier avec un nom comprenant des caractères accentués
    - Je le Zip (tout ça sous Windows)
    - Je l'upload avec devrais extraire le fichier de l'archive avec la librairie Zlib
    http://fr.php.net/manual/fr/ref.zlib.php

    C'est elle qui me retourne ce filename bizarre.
     
  10. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    Par dichotomie, j'ai réussi à cerner la fonction (plutôt balaise) qui récupère le filename.

    Si quelqu'un voit un problème, bravo.

    Perso, je pense que cela se situe ici.

    Code:
    $p_header['filename'] = iconv("CP866", "UTF-8", fread($this->zip_fd, $p_header['filename_len']));
    Voici l'extrait.

    Code:
      function privReadCentralFileHeader(&$p_header)
      { 
        //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", "");
        $v_result=1;
    
        // ----- Read the 4 bytes signature
        $v_binary_data = @fread($this->zip_fd, 4);
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
        $v_data = unpack('Vid', $v_binary_data);
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
    
        // ----- Check signature
        if ($v_data['id'] != 0x02014b50)
        {
          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature");
    
          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
    
          // ----- Return
          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
          return PclZip::errorCode();
        }
    
        // ----- Read the first 42 bytes of the header
        $v_binary_data = fread($this->zip_fd, 42);
    
        // ----- Look for invalid block size
        if (mb_strlen($v_binary_data, "WINDOWS-1251") != 42)
        {
          $p_header['filename'] = "";
          $p_header['status'] = "invalid_header";
          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".mb_strlen($v_binary_data));
    
          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".mb_strlen($v_binary_data, "WINDOWS-1251"));
    
          // ----- Return
          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
          return PclZip::errorCode();
        }
    
        // ----- Extract the values
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'");
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'");
        $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
    
        // ----- Get filename
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']);
        if ($p_header['filename_len'] != 0)
          $p_header['filename'] = iconv("CP866", "UTF-8", fread($this->zip_fd, $p_header['filename_len']));
        else
          $p_header['filename'] = '';
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
    
        // ----- Get extra
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']);
        if ($p_header['extra_len'] != 0)
          $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
        else
          $p_header['extra'] = '';
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
    
        // ----- Get comment
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']);
        if ($p_header['comment_len'] != 0)
          $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
        else
          $p_header['comment'] = '';
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
    
        // ----- Extract properties
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
    
        // ----- Recuperate date in UNIX format
        //if ($p_header['mdate'] && $p_header['mtime'])
        // TBC : bug : this was ignoring time with 0/0/0
        if (1)
        {
          // ----- Extract time
          $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
          $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
          $v_seconde = ($p_header['mtime'] & 0x001F)*2;
    
          // ----- Extract date
          $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
          $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
          $v_day = $p_header['mdate'] & 0x001F;
    
          // ----- Get UNIX date format
          $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
    
          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
        }
        else
        {
          $p_header['mtime'] = time();
          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
        }
    
        // ----- Set the stored filename
        $p_header['stored_filename'] = $p_header['filename'];
    
        // ----- Set default status to ok
        $p_header['status'] = 'ok';
    
        // ----- Look if it is a directory
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'");
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')');
        if (substr($p_header['filename'], -1) == '/') {
          //$p_header['external'] = 0x41FF0010;
          $p_header['external'] = 0x00000010;
          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\'');
        }
    
        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
    
        // ----- Return
        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
        return $v_result;
      }
    
     
  11. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    OK j'ai trouvé.


    Code:
    $p_header['filename'] = iconv("ISO-8859-1", "ISO-8859-1", fread($this->zip_fd, $p_header['filename_len']));
     
Chargement...
Similar Threads - décoder Forum Date
Comment decoder ce code ? Développement d'un site Web ou d'une appli mobile 11 Octobre 2010
Comment decoder ce code ? Développement d'un site Web ou d'une appli mobile 19 Septembre 2010
Problème pour décoder les flux RSS Développement d'un site Web ou d'une appli mobile 24 Février 2007
[ASP] Decoder une URL Développement d'un site Web ou d'une appli mobile 14 Août 2006
decoder les caracteres type " Développement d'un site Web ou d'une appli mobile 23 Octobre 2005
Pagerank Decoder Netlinking, backlinks, liens et redirections 20 Juin 2005