Bonjour,
Je ne comprends pas pourquoi mon module ne marche pas

<?PHP header( 'content-type: text/html; charset=utf-8' ); ?>
<!DOCTYPE html>
<html lang="fr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head><body>
<?PHP 
ini_set ('max_execution_time', 0);
function TraiteLui($repertoire, $nomFichier) 
 {
    $nouvNom = str_replace("é", "e",  $nomFichier);
    $nouvNom = str_replace("è", "e",  $nouvNom);
    $nouvNom = str_replace("ë", "e",  $nouvNom);
    $nouvNom = str_replace("ä", "a",  $nouvNom);
    $nouvNom = str_replace("à", "a",  $nouvNom);
   $nouvNom = str_replace("ù", "u",  $nouvNom);
    $nouvNom = str_replace("ü", "u",  $nouvNom);
    $nouvNom = str_replace("'", " ",  $nouvNom);
    $nouvNom = str_replace("  ", " ", $nouvNom);
    $nouvNom = str_replace("\,", "",  $nouvNom);
   rename($repertoire ."/". $nomFichier, $repertoire ."/". $nouvNom);
    echo $repertoire ."/". $nouvNom." xxx<br />";
 }
 function un_rep ($repertoire) 
   {
     $le_repertoire = opendir($repertoire); 
        while($fichier = @readdir($le_repertoire))
        {
            if ($fichier == "." || $fichier == "..") {continue;}
            if (is_dir($repertoire . $fichier)) { un_rep ($repertoire . $fichier."/"); } 
              else { TraiteLui($repertoire, $fichier); }
        }
        @ closedir($le_repertoire);
    }
un_rep ("g:/vang/");
?>
</p></body></html>


En premier il ne traite pas les é à etc...
De même les doubles espaces ne sont pas suprimés
une idée ?
Merci d'avance
Salut,

Après avoir tester une multitude de choses, j'en conclu qu'un seul truc marche pour moi :

ajouter une nouvelle fonction :

function enleveaccents(&$str)
{
	$unwanted_array = array(    'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
                            'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
                            'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
                            'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
                            'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );
	$str = strtr( $str, $unwanted_array );
}

à la place de tes str_replace.

P.S : tu notifieras le petit "&" en paramètre d'entrée. Ce qui signifie qu'on travail directement sur l'adresse de la variable. Donc tu la modifie directement. Sinon tu peux passer par un return classique.

P.S2: il faut compléter pour supprimer les espaces Smiley cligne
Modifié par JENCAL (19 Oct 2017 - 15:51)
Merci à toi je regardes cela !
Pour les espaces je ne sais quoi écrire ,en javascript " "," " marche car tant qu'il retrouve " " il refait !
function enleveaccents($str)
{
	$unwanted_array = array(    'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
                            'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
                            'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
                            'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
                            'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', '\''=>' ', '  '=>' ', ','=>'' );
	return $str = strtr( $str, $unwanted_array );
}


J'ai mis à jour le tableau pour prendre en compte le double espace, le guillemet, la virgule.
Bonjour,
Le framework codeigniter possède quelques fonctions intéressantes pour ce genre de choses.

Elles sont légères et peuvent être utiliser en dehors du framework et présente l'avantage d'avoir été testées et débuggées.

Pour ma part, je les ai pas mal utilisées pour générer des urls à partir de texte.

La fonction "convert_accented_characters" (https://www.codeigniter.com/user_guide/helpers/text_helper.html) fait ce que tu cherches à faire.

Si cela t'intéresse, je peux partager le fichier de fonctions que j'inclus avec ces fonctions ...
Merci de vos réponses !
Malheureusement le problème est non résolu mais cerné !!!
Simplement la lecture ne donne pas les accents et je ne comprends pas ... testez vous même

<?php 
header('Content-type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?PHP 

function un_rep ($repertoire) 
 {
  $le_repertoire = opendir($repertoire); 
  while($fichier = @readdir($le_repertoire))
   {
    if ($fichier == "." || $fichier == "..") {continue;}
    if (is_dir($repertoire . $fichier)) { un_rep ($repertoire . $fichier."/"); } 
    else { echo $repertoire . $fichier."<br />"; }
   }
  @ closedir($le_repertoire);
 }
un_rep ("g:/vang/");
?>
</body></html>
Bonjour,
j'ai testé ton code, en le modifiant comme ceci, je vois les accents (sous windows):

    else { echo iconv('cp1252','utf-8', $repertoire . "/" .$fichier."<br />"); }


J'ai eu pas mal de problèmes avec les encodages sous windows en faisant des batchs ... Windows n'est pas en utf-8.
Meilleure solution
Modérateur
Chez moi ça marche,

mais bon:

un_rep ("g:/vang/");

C'est du Windows?

Sur Windows, (enfin si ce n'est pas un vieux truc) Les noms de fichiers sont encodés en UTF16 mais les fonctions du filesystem PHP fonctionnent avec une librairie ANSI, em 8bits. Ce qui pose quelques problèmes.

Tu peux éventuellement utiliser mb_convert_encoding($fichier, 'UTF-8', 'windows-1254') qui peut peut-être restituer la chaine correctement.

Windows et php, c'est une mauvaise idée (à mon avis)
Modifié par kustolovic (20 Oct 2017 - 08:41)
Bravo Loicbcn, seul ta formule marche 100% => traité 24.000 fichiers sur une usb de 2Tetra
TROP COOL Smiley cligne

<?php 
header('Content-type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?PHP 
ini_set ('max_execution_time', 0);
function TraiteLui($repertoire, $nomFichier) 
 {
    $nouvNom = iconv('cp1252','utf-8',$nomFichier);
    echo $repertoire . $nouvNom."<br />";
    $nouvNom = str_replace("é", "e",  $nouvNom);
    $nouvNom = str_replace("è", "e",  $nouvNom);
    $nouvNom = str_replace("ë", "e",  $nouvNom);
    $nouvNom = str_replace("ä", "a",  $nouvNom);
    $nouvNom = str_replace("à", "a",  $nouvNom);
    $nouvNom = str_replace("ù", "u",  $nouvNom);
    $nouvNom = str_replace("ü", "u",  $nouvNom);
    $nouvNom = str_replace("'", " ",  $nouvNom);
    $nouvNom = str_replace("  ", " ", $nouvNom);
    $nouvNom = str_replace("  ", " ", $nouvNom);
    $nouvNom = str_replace("  ", " ", $nouvNom);
    $nouvNom = str_replace("  ", " ", $nouvNom);
    $nouvNom = str_replace("\,", "",  $nouvNom);
    rename($repertoire . $nomFichier, $repertoire .$nouvNom);
    echo $repertoire . $nouvNom."<br />";
 }
function un_rep ($repertoire) 
 {
  $le_repertoire = opendir($repertoire); 
  while($fichier = @readdir($le_repertoire))
   {
    if ($fichier == "." || $fichier == "..") {continue;}
    if (is_dir($repertoire . $fichier)) { un_rep ($repertoire . $fichier."/"); } 
    else { TraiteLui($repertoire, $fichier); }
   }
  @ closedir($le_repertoire);
 }
un_rep ("g:/vang/");
?>
</body></html>

Modifié par Christele (20 Oct 2017 - 10:35)