Edit report at https://bugs.php.net/bug.php?id=64667&edit=1

 ID:                 64667
 User updated by:    jisgro at teliae dot fr
 Reported by:        jisgro at teliae dot fr
 Summary:            mb_detect_encoding problem
 Status:             Open
 Type:               Bug
 Package:            *General Issues
 Operating System:   Debian Edge
 PHP Version:        5.3.24
 Block user comment: N
 Private report:     N

 New Comment:

sorry, the Test script is not very simple, here is a "light version":

function convertFileInUTF8($sFileName){
  $sFileContent = file_get_contents($sFileName);

  $tabKnownEncoding = array(
      'ASCII'
      ,'ISO-8859-1'
      ,'ISO-8859-2'
      ,'ISO-8859-15'
      ,'UTF-8'
      ,'UTF-16'
      ,'UTF-32'
      ,'Windows-1251'
      ,'Windows-1252'
  );
  $sFormat = mb_detect_encoding($sFileContent, $tabKnownEncoding, true);

  echo "Format : ".$sFormat."\n";

  iconv_set_encoding("internal_encoding", "UTF-8");

  $sNewContent = iconv($sFormat, 'UTF-8', $sFileContent);

  //Save
  file_put_contents($sFileName, $sNewContent);

  ttt($sFileContent,'<->',$sNewContent);
  $sFormat = mb_detect_encoding($sNewContent, $tabKnownEncoding, true);

  echo "Format : ".$sFormat."\n";


Previous Comments:
------------------------------------------------------------------------
[2013-04-18 14:08:56] jisgro at teliae dot fr

Description:
------------
php 5.3.3
We open a file with ANSII encoding, we set the encoding with the 
"iconv_set_encoding("internal_encoding", "UTF-8");" function to UTF8
the mb_detect_encoding return before and after the encoding : Format : 
ISO-8859-1 

The function is in the test script, it returns : 

Format : ISO-8859-1 mystere
ééé ééé é éé à à à à à , <-> , ��� ��� � �� � 
� � � � ,
Format : ISO-8859-1 

Test script:
---------------
function convertirFichierEnUTF8($sNomFichier){
  $sContenuFichier = file_get_contents($sNomFichier);
  if($sContenuFichier == ''){//cas vide et cas erreur de lecture
    return;
  }

  $tabFormatsReconnus = array(
     'ASCII'
    ,'ISO-8859-1'
    ,'ISO-8859-2'
    ,'ISO-8859-15'
    ,'UTF-8'
    ,'UTF-16'
    ,'UTF-32'
    ,'Windows-1251'
    ,'Windows-1252'
  );
  $sFormat = mb_detect_encoding($sContenuFichier, $tabFormatsReconnus, true);
  //echo $sNomFichier."\n";
  echo "Format : ".$sFormat."\n";

  if($sFormat === false){
    CLog::trace('Erreur encodage du fichier '.$sNomFichier.' inconnu', 
'Conversion fichier', 'Erreur détection encodage', 0,
        CLog::INIVEAU_ERREUR_CRITIQUE, CConfig::$sEmail_Trace_Erreur);
    return;
  }

  //Les formats suivants n'ont pas besoin de conversion
  if(in_array($sFormat, array('UTF-8', 'ASCII'))){
    return;
  }

  iconv_set_encoding("internal_encoding", "UTF-8");
  //iconv_set_encoding("output_encoding", "UTF-8");
  $sNouveauContenu = iconv($sFormat, 'UTF-8', $sContenuFichier);

  //Si la conversion a eu un problème
  if($sNouveauContenu === ''){
    CLog::trace('Erreur à la conversion en UTF8 du fichier '.$sNomFichier, 
'Conversion fichier', 'Erreur conversion UTF8', 0,
       CLog::INIVEAU_ERREUR);
    $sNouveauContenu = iconv($sFormat, 'UTF-8//IGNORE', $sContenuFichier);
    CreeRepSiNonExiste(CConfig::$sRepertoire_log, 'erreursConversionFichiers');
    
file_put_contents(CConfig::$sRepertoire_log.'erreursConversionFichiers/'.basename($sNomFichier),
 $sContenuFichier);
  }

  //On sauvegarde le résultat de la conversion
  file_put_contents($sNomFichier, $sNouveauContenu);
  echo ($sContenuFichier === $sContenuFichier ? 'aie aie aie c 
pareil':'mystere' );
  ttt($sNouveauContenu,'<->',$sNouveauContenu);
  $sFormat = mb_detect_encoding($sNouveauContenu, $tabFormatsReconnus, true);
  //echo $sNomFichier."\n";
  echo "Format : ".$sFormat."\n";
}

Expected result:
----------------
return format in UTF8

Actual result:
--------------
Format : ISO-8859-1 


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=64667&edit=1

Reply via email to