Bonjour,
Je listes une une photothèque dont les noms sont accentués
ors je n'y arrives pas quelque soit mon header en tête de mon PHP,
et le choix d'encodage du DOCTYPE,
pourtant mon ftp les voit normalement ???
Un conseil ? merci d'avance. Smiley smile
limipl a écrit :
Le meilleur conseil c'est pas de noms de fichiers accentués.

Bonjour,
Il ne fallait pas te déranger pour dire cela ... Il y a des sites qui y arrivent heureusement ,on croirai revivre les débuts du DOS ... Smiley decu
chaque fois que j’ai commis l’imprudence de transférer en ftp un fichier avec un nom contenant autre chose que du pur ASCII j’ai rencontré des problèmes, allant jusqu’à devoir supprimer le répertoire pour supprimer ces fichiers et refaire un ftp.
Je te recommande fortement de ne pas te lancer dans cette opération délicate. Par contre si tu y parviens raconte nous en détail comment tu t’en es sorti, ça pourrait servir!
Modérateur
Bonjour,

Comment listes-tu les fichiers? un petit exemple de code?
Sur quel OS sont stockés les fichiers?

C'est normalement possible, ce qui est délicat c'est les transferts d'une plateforme à une autre, si les noms et chemins des fichiers sont stockés ailleurs (dans une DB par exemple)

On peut avoir des soucis little/big endian sur les encodages multi-bytes, on peut avoir des encodages différents: caractère «é» ou caractère «e» + modificateur «´»

a écrit :
Il y a des sites qui y arrivent heureusement

Tout à fait, éviter les accents simplifie la vie, mais ce n'est pas interdit de se la complexifier un peu.
Merci pour vos réponses,
allez sur un de mes sites et choisissez la galerie dont les noms à des accents,
alors je vous guide allez ici
http://www.laurence-simon.fr/index.php
cliquez dessins sur la bande d'en haut prenez le sixième tableau et allez en bas c'est le nom réel du fichier !!
je vais vous donner mon code wphoto2.php l'ajax (c'est cadeau)

<?php
session_start();
$moijipi="PHO";
require("index-param.php");
$Leretour="index.php";
$LeTitle="La Phototheque de  ".$LeTitle;
$Meta1="La Photheque, ".$Meta1;
$Meta2="La Photheque, ".$Meta2;
$lapage="wphoto2.php";
require("lesw/wdoctype.php");
$Rep_Album="albums2";
$chemin = ''.$Rep_Album.'/';
$repertoire = opendir($chemin);
while($element = readdir($repertoire)) { $liste[] = $element; }
natsort($liste);  /* arsort  natsort */
$liste = array_values($liste);
$nombre = count($liste);
$LaCategorieNum=1;
$Categorie = array();
$Categorie[0]="";
$nbrx=1;
for ($i=0; $i<$nombre; $i++)
 {
  if ($liste[$i] != "." && $liste[$i] != ".." && is_dir($chemin.$liste[$i]))
   {
      $Categorie[$nbrx]=$liste[$i];
      $nbrx++;
   }
 } 
closedir($repertoire);
unset($liste);
?>
<link rel='stylesheet' href='wphototheque.css' type='text/css' media='all'  />
<script type="text/javascript">
var categorie=1;
var nbractu=1;
var nbractif=1;
var nbrimg=new Array;
nbrimg[0]=0;
var nom_categorie=new Array;
nom_categorie[0]="";

<?php
echo "var QuelRep='".$Rep_Album."';";
for ($i=1; $i<$nbrx; $i++)
 {
  $chemin = ''.$Rep_Album.'/'.$Categorie[$i].'/';
  $repertoire = opendir($chemin);
  unset($liste);
  while($element = readdir($repertoire)) { $liste[] = $element; }
  $liste = array_values($liste);
  $nombre = count($liste);
  $nombreOK =1 ;
   for ($i2=0; $i2<$nombre; $i2++)
    {
     $pos = strpos($liste[$i2], ".jpg");
     if ($liste[$i2] != "." && $liste[$i2] != ".." && !is_dir($chemin.$liste[$i2]) && $pos>3)
      { $nombreOK++ ;   }
    }
  if($nombreOK!=0) echo "nbrimg[".$i."]=".$nombreOK.";";
  echo "nom_categorie[".$i."]='".$Categorie[$i]."';";
  closedir($repertoire);
 }
 echo "var nbcateg=".$nbrx.";";
?>
function maFonctionAjax(action,num_categorie,parde,autre,voirlui)
{
  var MonAjax;
  if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
  else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
  else {
    alert("Votre navigateur n'est pas adapté pour faire des requêtes AJAX..."); 
    MonAjax = false;   }
  MonAjax.open('POST',"wphototheque_ajax.php",true);
  MonAjax.onreadystatechange = function()
  {
      if (MonAjax.readyState == 4 && MonAjax.status == 200)
      {
       if (action!=777 && action!=888 )
        {  
         document.getElementById('LePave_hd').innerHTML = MonAjax.responseText;
         setTimeout("image()", 1000);                        
        }
       if (action==777)
        {  
         document.getElementById('LePave1').innerHTML = "";
         document.getElementById('LePave_hd').innerHTML = MonAjax.responseText;
         setTimeout("image()", 1000);                        
        }
       if (action==888)
        {  
         document.getElementById('LePave1').innerHTML = "";
         document.getElementById('LePave_hd').innerHTML = MonAjax.responseText;
         setTimeout("image()", 1000);                        
        }
      }
      else{                         
           document.getElementById('load').style.visibility="visible";
           }
  }
  MonAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  MonAjax.send('action='+action+'&num_categorie='+categorie+'&parde='+parde+'&autre='+autre+'&voirqui='+voirlui+'&QuelRep='+QuelRep);                  
}
function image()
{
 document.getElementById('load').style.visibility="hidden";
}
function menu()
{
var LeMenu="";
var reste=nbrimg[categorie]-nbractu;
if (nbrimg[categorie]>24 && nbractu>24 && reste>24) LeMenu=LeMenu+"&nbsp;&nbsp;<a onclick='recul();' href='#'  class='phototheque' ><img src='logos/fleche_gauche.gif' id='Xx' alt='Retour' /></a>&nbsp;&nbsp;<img src='logos/pave.gif' id='Zz' alt='phototheque' />&nbsp;&nbsp;<a onclick='avance();' href='#'  class='phototheque' ><img src='logos/fleche_droite.gif' id='Yy' alt='Suite' /></a><br />";
if (nbrimg[categorie]>24 && nbractu>24 && reste<24) LeMenu=LeMenu+"&nbsp;&nbsp;<a onclick='recul();' href='#'  class='phototheque' ><img src='logos/fleche_gauche.gif' id='Xx' alt='Retour' /></a>&nbsp;&nbsp;<img src='logos/pave.gif' id='Zz' alt='phototheque' />&nbsp;&nbsp;<br />";
if (nbrimg[categorie]>24 && nbractu<25 && reste>24) LeMenu=LeMenu+"&nbsp;&nbsp;<a onclick='recul();' href='#'  class='phototheque' > &nbsp;&nbsp;<img src='logos/pave.gif' id='Zz' alt='phototheque' />&nbsp;&nbsp;<a onclick='avance();' href='#'  class='phototheque' ><img src='logos/fleche_droite.gif' id='Yy' alt='Suite' /></a><br />";
LeMenu=LeMenu+"<div class='centrePhototheque1'>";
for (i=1; i<nbcateg; i++)
 {
  if(i==4 || i==7 || i==10) LeMenu=LeMenu+"<br />";
  if(i>1 && i!=4 && i!=7 && i!=10) LeMenu=LeMenu+" - ";
  /* ------controle nom du repertoire menu ------ */
var Clui = nom_categorie[i];
var CluiResult = Clui.substring (2,3);
Clui = nom_categorie[i];
XClui = nom_categorie[i];
if (CluiResult=="_") XClui=Clui.substring (3);
  if (i!=categorie) { LeMenu=LeMenu+"<a  href='#' onclick='ChangeCatego(100,"+i+",1,1);'  class='phototheque16'> "+XClui+" </a>";}
  if (i==categorie) { LeMenu=LeMenu+"<a  href='#'  class='phototheque16R'> "+XClui+" </a>";}
  } 
document.getElementById('LePave1').innerHTML = LeMenu+"</div>";
}
function ChangeCatego(a,b,c,d)
{
categorie=b;
nbractu=1;
menu();
maFonctionAjax(a,b,1,1,0);
}
function voirfin()
{
nbractif=1;    
maFonctionAjax(99,categorie,nbractu,1,0);
menu();
}
function voir(xx,yy,zz)
{
nbractif=zz;    
/* maFonctionAjax(777,yy,nbractu,xx,nbractif); */
maFonctionAjax(888,yy,nbractu,'',nbractif);
}
function droite()
{      
var work=nbrimg[categorie]-1;
if(nbractif<work) nbractif=nbractif+1;
maFonctionAjax(888,categorie,nbractu,'',nbractif);
}
function gauche()
{
if(nbractif>1) nbractif=nbractif-1;
maFonctionAjax(888,categorie,nbractu,'',nbractif);
}
function avance()
{
var work=nbrimg[categorie];
nbractu=nbractu+25;
if(nbractu<work) {maFonctionAjax(99,categorie,nbractu,1,0);}
else { nbractu=nbractu-24;}
menu();
}
function recul()
{
var work=nbrimg[categorie];
nbractu=nbractu-25;
if(nbractu>0) {maFonctionAjax(98,categorie,nbractu,1,0);}
else { nbractu=nbractu+24;}
menu();
}
document.body.style.backgroundColor='#111111'; 
maFonctionAjax(100,1,1,1,0); 
setTimeout("menu()", 500);
</script>
<div class='centrePhototheque'>
<img src='logos/ajaxloader.gif' style='visibility:hidden' id='load'  name='load' /><br />
</div>
<div class="boutonR">
<img alt="" src="zzz/fleche_droite_a.gif" onclick="droite();return false" style="cursor: pointer;" />
</div>
<div class="boutonL">
<img alt="" src="zzz/fleche_gauche_a.gif" onclick="gauche();return false" style="cursor: pointer;" />
</div>
<div id="LePave1" class="arrondi">

</div>
<div id="LePave_hd" class="arrondi">
</div>
<br />
</div>
<div class='centre2blanc' >
<div class="arrondi">
<a href="wphoto_hd.php" alt="notre sélection en HD" class="phototheque24" >notre sélection en HD</a><br />
</div>
<br />
</div>
<?php
require("lesw/wbas.php"); 
?>


Et l'appelé wphototheque_ajax.php

<?php
header('Content-type: text/html; charset=iso-8859-1');
function secur($a) 
	{
  $a=trim($a); 
  $a=str_replace("<","",$a);
  $a=str_replace(">","",$a);
  $a=str_replace("&&","",$a);
  $a=str_replace("||","",$a);
  $a=str_replace("\\","",$a);
  $a=str_replace("  "," ",$a); 
  $a=str_replace(" AND ","",$a);
  $a=str_replace(" and ","",$a);
  $a=str_replace(" OR ","",$a);
  $a=str_replace(" or ","",$a);
  $a=str_replace("Œ","OE",$a);
  $a=str_replace("œ","oe",$a);
  $a=str_replace(" \0","",$a);
  $a=str_replace("\0","",$a);
  $a=str_replace("\n\n","\n",$a);
  $a=str_replace("\r","",$a);
  return $a;
}

?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name=viewport content="width=device-width, initial-scale=1">
<!--[if IE]>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<![endif]-->
</head><body>

<?PHP
$action = (isset($_POST['action'])) ? intval($_POST['action']) : 100;
$num_categorie = (isset($_POST['num_categorie'])) ? intval($_POST['num_categorie']) : 1;
$parde = (isset($_POST['parde'])) ? intval($_POST['parde']) : 1;
$autre = (isset($_POST['autre'])) ? $_POST['autre'] : 1;
$voirqui = (isset($_POST['voirqui'])) ? intval($_POST['voirqui']) : 0;
$QuelRep = (isset($_POST['QuelRep'])) ? ($_POST['QuelRep']) : 'xxx'; /* secur ()  */
if ($action==777) $action="voir";

/* ==1 liste des categories donc repertoires de albums== */
$chemin = ''.$QuelRep.'/';
$repertoire = opendir($chemin);
while($element = readdir($repertoire)) { $liste[] = $element; }
natsort($liste);  /* arsort  natsort */
$liste = array_values($liste);
$nombre = count($liste);
$Categorie = array();
$Categorie[0]="";
$wnombre=1;
for ($i=0; $i<$nombre; $i++)
 {
  if ($liste[$i] != "." && $liste[$i] != ".." && is_dir($chemin.$liste[$i]))
   {
      $Categorie[$wnombre]=$liste[$i];
      $wnombre++;
   }
 } 
closedir($repertoire);
$CategorieNbr = array();
$CategorieNbr[0]="";

for ($i=1; $i<$wnombre; $i++)
 {
  $chemin = ''.$QuelRep.'/'.$Categorie[$i].'/';
  $repertoire = opendir($chemin);
  unset($liste);
  while($element = readdir($repertoire)) { $liste[] = $element; }
  natsort($liste);  /* arsort  natsort */
  $liste = array_values($liste);
  $nombre = count($liste);
  $nombreOK =1 ;
   for ($i2=0; $i2<$nombre; $i2++)
    {
     $pos = strpos($liste[$i2], ".jpg");
     if ($liste[$i2] != "." && $liste[$i2] != ".." && !is_dir($chemin.$liste[$i2]) && $pos>3)
      { $nombreOK++ ;   }
    }
  $CategorieNbr[$i]=$nombreOK;
  closedir($repertoire);
 }
  $listeOK = array();
  $listeOK[0]='';
  $chemin = ''.$QuelRep.'/'.$Categorie[$num_categorie].'/';
  $repertoire = opendir($chemin);
  unset($liste);
  while($element = readdir($repertoire)) { $liste[] = $element; }
  natsort($liste);  /* arsort  natsort */
  $liste = array_values($liste);
  $nombre = count($liste);
  $z=1;
   for ($i2=0; $i2<$nombre; $i2++)
    {
     $pos = strpos($liste[$i2], ".jpg");
     if ($liste[$i2] != "." && $liste[$i2] != ".." && !is_dir($chemin.$liste[$i2]) && $pos>3 )
      {
      $listeOK[$z]=$liste[$i2];
      $z=$z+1;
      $listeOK[$z]='';
      }
    }
if ($action==888)
 {
  $autre=''.$QuelRep.'/'.$Categorie[$num_categorie].'/'.$listeOK[$voirqui].'';
  $action="voir";  
 }

if($action !="voir" && $action !=888) 
{
  $jusque=$parde+25;
  if($jusque > $CategorieNbr[$num_categorie]){ $jusque=$CategorieNbr[$num_categorie];}
  $repond="";
  $d=0;
  for ($i2=$parde; $i2<$jusque; $i2++)
    {
      $pos = strpos($listeOK[$i2], ".jpg");
      if ($listeOK[$i2] != "." && $listeOK[$i2] != ".." && !is_dir($chemin.$listeOK[$i2]) && $pos>3 )
       {
           
         $lui=''.$QuelRep.'v/'.$Categorie[$num_categorie].'v/'.$listeOK[$i2].'';
         $lui2=str_replace("xx","'",$lui);      
         $work=str_replace("v/","/",$lui);
         $repond .="<a href='#' class='phototheque'><img src=\"".$lui."\" alt='Galerie' class='phototheque' width='150' height='150' onclick='voir(\"".$work."\",".$num_categorie.",".$i2.");return false' /></a>"; 
         $d=$d+1;
      }
    }
  closedir($repertoire);
}
if($action =="voir") 
{
    
$autretxt = $autre."x";  
$sonlen= strlen($autretxt); 
$pos=0;
$pos = strpos($autre, "ls");
if($pos==0)
{
$pos = strpos($autre, "ks");    
}
if($pos==0)
{
$pos = strpos($autre, "js");    
}
if($pos==0)
{
$pos = strpos($autre, "hs");    
}
if($pos==0)
{
$pos = strpos($autre, "ms");    
}

$pos = $pos+6;
$coef1=$pos-$sonlen;
$autretxt=substr($autretxt, $coef1, -1);  
$autretxt=str_replace(".jpg","",$autretxt);  
$autretxt=str_replace("albums","",$autretxt);  
$autretxt=str_replace("_"," ",$autretxt); 
$autretxt=str_replace("-"," ",$autretxt);
$autretxt=str_replace("xx","'",$autretxt); 

$pos = strrpos($autretxt, "/");
if ($pos === false) { 	/* non trouvé ... */ }
 else { $pos=$pos+1; $autretxt = substr($autretxt, $pos);  }
 
$dreyfus=0;
$dreyfus = strpos($autretxt, "zoom");
if($dreyfus!=0)
{
$autretxt = " Laurence Simon : G&eacute;rard Louis-Dreyfus Foundation collection 1980 - 2000<br />";    
}

$repond="<img style='vertical-align:middle;' alt='Galerie' src='".$autre."' class='bandePH'
  onclick='voirfin();return false' /><br /><br />".$autretxt."<br />";

} 
echo $repond;
?>
</body></html>

Modifié par Jean-Pierre-Bruneau (26 Oct 2019 - 02:36)
Houla les amis il vous manque un des requiere surtout le wdocjp.php
qui commence ainsi

<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<meta name=viewport content="width=device-width, initial-scale=1">
<!--[if IE]>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<![endif]-->

Alors vous avez vu l'astuce le HTML du visiteur est UTF8
Mais le PHP qui fait le boulot est en iso-8859-1

<?php
header('Content-type: text/html; charset=iso-8859-1');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">

Hiiiiii.... a vous de réfléchir... car en iso-8859-1 mais le PHP !!!
car dans la même page le DOCTYPE est UTF8 pour envoyer l'echo HTML vers la page du visiteur !
Modifié par Jean-Pierre-Bruneau (27 Oct 2019 - 10:58)