Remplacer caractères accentués lors de l'upload d'une photo Remplacer caractères accentués lors de l'upload d'une photo
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Remplacer caractères accentués lors de l'upload d'une photo

Started by HollowMac, July 19, 2009, 07:42:45 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

HollowMac

Bonjour,

J'aimerais remplacer les caractères accentués de mes photos par leurs homologues non accentués (exemple : remplacer "é" par "e"), car le module Lightbox (que vous devez connaitre) n'arrive pas à afficher mes images avec caractères accentués (qui sont remplacés par des % et compagnie).

J'ai bidouiller $picture_name dans upload.php mais rien à faire : strtr ou str_replace ne marchent pas !

Une idée ?

COrdialement,
Merci.

François Keller

si c'est lors de l'upload, il s'agit du nom de fichier ?
Dans ce cas, il suffit de renommer les images AVANT de les télécharger sur la galerie. De toute façon, ce n'est pas une bonne idée de mettre des caractères accentués dans les noms de ficheirs
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

HollowMac

Quote from: François Keller on July 20, 2009, 05:56:34 PM
Dans ce cas, il suffit de renommer les images AVANT de les télécharger sur la galerie
;D Il suffirait aussi de faire en sorte que Coppermine les renomme.

Cette galerie a pour but de permettre aux membres de mon site d'y mettre leurs photos. Et dans le but de rendre cette tâche la plus simple possible, je ne veux pas qu'ils renomment eux même leurs photos.

François Keller

Quote from: HollowMac on July 21, 2009, 08:30:40 PM
;D Il suffirait aussi de faire en sorte que Coppermine les renomme.
certe, mais il faut bien voir qu'il n'y a pas tant de langues que ça qui utilisent les caractères accentués.
Il y a néanmoins une fonction dans la configuration qui permets de remplacer certains caractères si ils sont présents dans le nom du fichier par un "_" (paramètres avancés des images et des vignettes -> Caractères interdits dans les noms de fichiers)
il faudrait éventuellement aller voir cette fonction et y ajouter un boucle conditionnelle qui gère les accents...
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

HollowMac

J'ai réussi à résoudre mon problème en modifiant la fonction qui s'occupe de remplacer les caractères interdits !  :)

Dans le fichier fonctions.inc.php se trouvant dans le répertoire include, chercher la fonction replace_forbiden, et la remplacer par :


function replace_forbidden($str)
{
  static $forbidden_chars;
  if (!is_array($forbidden_chars)) {
    global $CONFIG, $mb_utf8_regex;
    if (function_exists('html_entity_decode')) {
      $chars = html_entity_decode($CONFIG['forbiden_fname_char'], ENT_QUOTES, 'UTF-8');
    } else {
      $chars = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;', '&nbsp;', '&#39;'), array('&', '"', '<', '>', ' ', "'"), $CONFIG['forbiden_fname_char']);
    }
    preg_match_all("#$mb_utf8_regex".'|[\x00-\x7F]#', $chars, $forbidden_chars);
  }
  /**
   * $str may also come from $_POST, in this case, all &, ", etc will get replaced with entities.
   * Replace them back to normal chars so that the str_replace below can work.
   */
  $str = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $str);
  $return = str_replace($forbidden_chars[0], '_', $str);
 
  /*
  Remplace les caractères accentués par leurs homologues non accentués.
  */ 
  $remplacements = array('à' => 'a', 'â' => 'a', 'Â' => 'A', 'é' => 'e', 'è' => 'e', 'ê' => 'e', 'Ê' => 'E', 'ù' => 'u', 'û' => 'u', 'Û' => 'U', 'ï' => 'i', 'î' => 'i', 'Ï' => 'I', 'Î' => 'I', 'ô' => 'o', 'Ô' => 'O');
  $return = strtr($return,$remplacements);

  /**
  * Fix the obscure, misdocumented "feature" in Apache that causes the server
  * to process the last "valid" extension in the filename (rar exploit): replace all
  * dots in the filename except the last one with an underscore.
  */
  // This could be concatenated into a more efficient string later, keeping it in three
  // lines for better readability for now.
  $extension = ltrim(substr($return,strrpos($return,'.')),'.');
  $filenameWithoutExtension = str_replace('.' . $extension, '', $return);
  $return = str_replace('.', '_', $filenameWithoutExtension) . '.' . $extension;

  return $return;
}

François Keller

oui effectivement, mais attention à ne pas remplacer le fichier modifié lors des mises à jour en espérant qu'il n'y aura pas de modifications majeures lors de ces mises à jour. en tout état de cause, il faut garder quelque part les références de ces changements
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog