IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Htaccess convertir accents dans url


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut Htaccess convertir accents dans url
    Bonjour,

    Est ce possible de convertir tous les caractères spéciaux et accents avec une commande dans le htaccess

    Je sais qu'on peut le faire en Php mais je recherche une solution avec le Htaccess.

    exemple
    www.mon-site.com/écrire-sans-accent.htm

    a transformer en

    www.mon-site.com/ecrire-sans-accent.htm

    Convertion :
    ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ

    en

    AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Peut-être avec un RewriteRule et une fonction de mapping maison. Cf. http://httpd.apache.org/docs/2.2/mod...tml#rewritemap

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Super info mais j'ai pas réussis à résoudre mon problème

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Mais encore ?

    RewriteMap est cependant à éviter tant que possible : non seulement il est contraignant (son usage n'est pas possible dans un fichier .htaccess) mais il peut impacter les performances du serveur.

    A priori, on pourrait faire ça comme ça :
    • Fichier de configuration d'Apache :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      RewriteEngine On
      RewriteMap accents "prg:C:/AMP/php5/php.exe -f C:/AMP/rewritemap.php"
    • .htaccess, ses règles locales (ici sur mon DocumentRoot) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      RewriteEngine On
      RewriteBase /
       
      RewriteRule [ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ] ${accents:%{REQUEST_URI}} [R]
      (on peut les placer ici comme dans le fichier de configuration d'Apache)
    • Le script (ici C:/AMP/rewritemap.php) :
      Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      <?php
      // set_time_limit(0);
      if (!defined('STDOUT'))
        define('STDOUT', fopen('php://stdout', 'w'));
      if (!defined('STDIN'))
        define('STDIN', fopen('php://stdin', 'r'));
      set_file_buffer(STDOUT, 0);
      while (!feof(STDIN)) {
        $ligne = utf8_decode(fgets(STDIN)); # le \n est conservé car ensuite attendu sur stdout par Apache
        fputs(
          STDOUT,
          strtr(
            $ligne,
            'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
            'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn'
          )
        );
      }

    (sous Linux, on peut utiliser le shebang au lieu de spécifier toute la commande pour exécuter le script au niveau de RewriteMap)

    A approfondir.

    Mais ayant vu votre sujet parallèle, laisser à MySQL gérer tout cela sera bien moins lourd et bien plus souple. Il vous suffit de choisir les collations & co appropriés (suffixe _ci en fait).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Merci beaucoup pour cette réponse très complète.

    En fait le htaccess étant tellement magique car avec une ligne on fait tellement de chose pour l'urlrewriting que je me demandais si il n'existait pas une fonction en une ligne, c'était le plus simple pour etre certain à 100% qu'on n'a plus d'accents dans les url et qu'on en a encore dans le contenu des pages.

    On réécrit bien les url alors pourquoi pas les accents avec une ligne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. .htaccess et paramètre dans URL
    Par The Molo dans le forum Apache
    Réponses: 3
    Dernier message: 18/07/2012, 23h13
  2. [Encodage] Problème d'encodage accents dans urls
    Par Jean-Georges dans le forum Langage
    Réponses: 2
    Dernier message: 13/09/2011, 11h47
  3. ASPX problème accent dans URL
    Par brownie007 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 09/03/2011, 10h02
  4. [PHP 4] les accents dans URL
    Par cyclopsnet dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2010, 16h36
  5. Réponses: 4
    Dernier message: 30/12/2005, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo