.htaccess : comment transformer les accents d'une URL par leur code ?

bluemandfr Messages postés 55 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 16 mai 2013 - 15 mai 2013 à 13:42
bluemandfr Messages postés 55 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 16 mai 2013 - 16 mai 2013 à 16:30
Bonjour à tous.

Je suis coincé par de nombreux fichiers ayant des accents dans leur nom : je migre un site hébergé sous Windows vers un autre serveur tournant lui sous Linux (hébergés chez un professionnel), et j'ai beaucoup

d'images ayant des noms de fichiers avec des accents : impossible de changer leur nom vu leur nombre, et vu l'utilisation immense dans les nombreuses pages et aussi dans la base de données sous la forme d'HTML stocké.

Comment, grâce à de l'URL Rewriting, transformer un nom d'un fichier demandé (ou une URL) par un nom avec des codes en lieu et place des accents ?

Exemples avec des noms de fichier :

NOM DE FICHIER                TRANSFORMATION SOUHAITÉE

Un_bel_été.jpg                Un_bel_%e9t%e9.jpg
Je_vais_à_la_plage.gif        Je_vais_%e0_la_plage.gif


Exemples avec des URL demandées dans des balises :

URL demandée par la propriété SRC                TRANSFORMATION SOUHAITÉE

http://monsite/IMAGES/Un_bel_été.jpg             http://monsite/IMAGES/Un_bel_%e9t%e9.jpg
IMAGES/Je_vais_à_la_plage.gif                    IMAGES/Je_vais_%e0_la_plage.gif


En fait, voici une liste d'accents NON EXHAUSTIVE et de leur code associé que je souhaiterais convertir grâce à .htaccess :

è : %e8
é : %e9
à : %e0
È : %c8
É : %c9
À : %c0
etc...

Précision : je cherche une solution exclusivement mis en oeuvre grâce à du code tapé dans .htaccess.

Merci à tous !

1 réponse

bluemandfr Messages postés 55 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 16 mai 2013
16 mai 2013 à 16:30
Bon, grâce à l'aide d'un internaute bienveillant, "yponomeut", et divers peaufinages, je suis parvenu à trouver une première solution qui marche nickel :

Le fichier .htaccess :

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

# Réécriture des fichiers images n'ayant pas été trouvés :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule IMAGES/(.*)$  http://www.monsite.extension/URLRewritingPourIMAGES.php?img=  $1 [L]


Le fichier "URLRewritingPourIMAGES.php ":

<?php
//------------------------------------------------------------------------------
// URLRewritingPourIMAGES.php
//------------------------------------------------------------------------------
// Définit certaines variables pour mon site dont $LIAISON_Root nécessaire ici
include_once "FFTI.inc.php";

if (isset($_GET['img']))
{
  $NomFichierImage   = $_GET['img'];
  
  $TabAccents = array('é','è','ê','ë','È','É','Ê','Ë','à','â','ä','À','Â','Ä','ù','û','ü','Ù','Û','Ü','î','ï','Î','Ï','ô','ö','Ô','Ö');
  
  for($i=0; $i<count($TabAccents); $i++) {$TabAccentsUTF8[] = utf8_encode($TabAccents[$i]);}
  $NomFichierImage = str_replace($TabAccentsUTF8, $TabAccents, $NomFichierImage);
  
  // $LIAISON_Root doit contenir le chemin physique sur le disque dur (il est initialisé par FFTI.inc.php)
  $PathFileName = $LIAISON_Root.'IMAGES/'.$NomFichierImage;
  $Extension = strtoupper(substr($PathFileName,-3));
  
  switch ($Extension)
  {
    case 'JPG': $Header = 'Content-Type: image/jpeg'; break;
    case 'GIF': $Header = 'Content-Type: image/gif'; break;
    case 'PNG': $Header = 'Content-Type: image/png'; break;
    default : exit("URLRewritingPourIMAGES.php : Type d'image non implémenté : [$Extension]");
  }
  
  header($Header);
  readfile($PathFileName);
}
//------------------------------ FIN DE FICHIER ------------------------------?>

En espérant que cela servira à des personnes confrontées au même problème que moi. ;)
0
Rejoignez-nous