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 :

URI Encoding - encodage automatique des liens


Sujet :

Apache

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut URI Encoding - encodage automatique des liens
    Bonjour,

    Savez-vous pourquoi avec Apache 2
    1. Le é est encodé %c3%a9 au lieu de %e9
    2. Les urls avec un accents encodé %e9 renvoient la page 403 Forbidden


    Je migre de easyPHP 1.8 à WampServer 2.0.

    sûre il ne fallait pas utiliser les accents

  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
    Il est où, ton accent ? Dans un nom de fichier ou en tant que paramètre ? Il est encodé où, quand et comment par Apache 2 ?

    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
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Les accents sont dans le nom des dossiers, exemple : http://127.0.0.1/test/Références/

    l'uri http://127.0.0.1/test/R%E9f%E9rences/ me renvoie une erreur 403 Forbidden.

    et les uri :
    1. http://127.0.0.1/test/R%C3%A9f%C3%A9rences/
    2. http://127.0.0.1/test/Références/


    me renvoient les erreurs :

    Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

    Fatal error: Unknown: Failed opening required 'C:/www/test/Références/index.php' (include_path='.;C:\php5\pear') in Unknown on line 0
    C'est une erreur de configuration Apache ou PHP je suppose...

    En clair, il est écrit dans le fichier access.log :
    127.0.0.1 - - [19/Jan/2008:19:13:49 +0100] "GET /test/R%E9f%E9rences/ HTTP/1.1" 403 304
    127.0.0.1 - - [19/Jan/2008:19:19:42 +0100] "GET /test/R%C3%A9f%C3%A9rences/ HTTP/1.1" 200 294
    127.0.0.1 - - [19/Jan/2008:19:19:44 +0100] "GET /test/R%C3%A9f%C3%A9rences/ HTTP/1.1" 200 294
    127.0.0.1 - - [20/Jan/2008:02:33:38 +0100] "GET /test/%40rbo/ HTTP/1.1" 200 7313

    Pour l'instant je cherche une solution dans les fichiers :
    1. httpd.conf
    2. php.ini

  4. #4
    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
    Pourquoi tu mets des accents dans tes noms de fichiers ou de répertoires ? Faut jamais faire ça, tu vois bien le pb !! Le plus simple c'est de les virer, ça t'évitera bon nombre de pb. C'est possible ou tu veux vraiment conserver tes accents ?

    De toutes les erreurs, je pense que la première (Forbidden) est la plus significative : je pense que c'est la bonne URL mais qu'il y a un fichier .htaccess ou une conf dans un quoi qui bloque l'accès. Tu as regardé de ce côté ?

    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je veux des accents dans mes dossiers... c'est tout.

    J'ai commenter dans mon fichier .htaccess la ligne :
    # options All -Indexes
    Elle bloque la navigation dans les répertoires sans fichier index.php et j'ai le même résultat.

  6. #6
    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
    Y a quoi d'autre dans ton .htaccess lié à l'authentification ? Tu peux essayer en le supprimant ?

    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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Il n'y a rien de bien intéressant dans mon fichier .htaccess, après tout cette erreur c'est sans doute liée à un module ou à la source même d'apache... j'ai fait une recherche sur le site httpd.apache.org et je n'ai rien trouvé de concluant.

    Détails sur les requêtes.

  8. #8
    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
    Effectivement, je viens d'installer Wampserver 2.0a et j'ai reproduit le pb. Je vais étudier la question.

    EDIT : résultat de certains tests

    Je viens de tester avec IE et FF, entre EasyPHP et Wamp : dans les 2 cas (EasyPHP ou Wamp), un coup ça marche avec IE mais pas avec FF ou inversement O_o.

    Il se trouve effectivement que le serveur Apache de Wamp attend de l'UTF-8 dans l'URL alors que celui d'EasyPHP attend de l'ISO-8859-1. En analysant les en-têtes HTTP envoyés par l'un et l'autre des navigateurs, IE code http://localhost/test/Références/ en UTF-8 (GET /test/R%C3%A9f%C3%A9rences/ HTTP/1.1) alors que FF code la même URL en ISO-8859-1 (GET /test/R%E9f%E9rences/ HTTP/1.1). Donc effectivement, ça foire dans les deux cas (EasyPHP et Wamp).

    Soit dit en passant, je trouve étrange que l'Apache de Wamp attende de l'UTF-8 alors que la spec HTTP dit que c'est ISO-8859-1 l'encodage par défaut...


    Après moultes recherches, je n'ai pas l'impression qu'on puisse demander à Apache de revenir à l'ancien système ISO-8859-1 sauf à recompiler Donc, pour ton pb, utilise des URL en UTF-8 et essaie de réenregistrer tes fichiers PHP en UTF-8 également. Je dirais que l'erreur PHP vient de là : tu reçois une chaîne de caractères en UTF-8 dans un script écrit en ISO-8859-1.

    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

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Elle super compliquée ta solution il doit y avoir une autre réponse. J'ai une question plus facile à résoudre en attendant :
    Pourquoi mon php_error.log affiche quand je choisi la version
    1. PHP 5.0.3
      [21-Jan-2008 19:58:01] PHP Warning: PHP Startup: Unable to load dynamic library 'C:/Program Files/wamp/bin/php/php5.2.5/ext/php_gd2.dll' - La procédure spécifiée est introuvable.

      in Unknown on line 0
    2. PHP 5.2.5

      [21-Jan-2008 20:01:34] PHP Warning: PHP Startup: Unable to load dynamic library 'C:/Program Files/wamp/bin/php/php5.0.3/ext/php_mysql.dll' - La procédure spécifiée est introuvable.

      in Unknown on line 0


    Il y a comme un décalage... J'ai remarqué ca parce que je n'ai plus mysql et mysqli. A les programmeurs...

    NB : Pour moi le percent-encoding ( %-enconding ) est ni de l'UTF8 ni de l'ISO. Voir les pages :
    1. http://www.faqs.org/rfcs/rfc1738.html
    2. http://www.faqs.org/rfcs/rfc2396.html
    3. Javascript : escape et encodeURI
    4. PHP : rawurlencode () et rawurlencode( utf8_encode ( ))

  10. #10
    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

    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

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup !
    J'ai 18 fichiers libmysql.dll en tout.
    • 16 pour WampServer2 ( 1 pour chaque version PHP, Apache et mySQL... )
    • 2 pour easyPHP 1.8 et 2.0B1

    Le tout est de trouver les versions PHP, Apache et mySQL compatibles ou d'utiliser easyPHP... mais je pense pas que la solution soit là. Je vais quand même faire quelques testes.

    Note : Toutes mes extensions lançaient cette erreur !

  12. #12
    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
    Sinon :
    Citation Envoyé par raphpell Voir le message
    NB : Pour moi le percent-encoding ( %-enconding ) est ni de l'UTF8 ni de l'ISO.
    Comment tu déduis ça de tes références ? le %xx sert à indiquer un octet par son code hexa. Si tu mets %C3%A9, étrangement ça correspond à la séquence d'octet UTF-8 du caractère é, alors pourquoi ne pas dire que le %xx permet de représenter des caractères UTF-8 ?

    Mais ça ne fait pas avancer le pb, je ne sais toujours pas vraiment comment résoudre ton pb : tu as essayé d'enregistrer une page en UTF-8 ? Je pense vraiment que c'est lié, alors soit tu arrives à faire comprendre à Apache que le charset par défaut est ISO-8859-1 (j'ai cru lire qq part que ça pouvait être lié au charset par défaut de l'OS ) et tu es sauvé, soit tu ne changes pas Apache et tu dois réenregistrer toutes tes pages en UTF-8.

    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

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour ceux qui tomberaient sur ce forum, voici quelques infos au sujet de l'encodage des URL.

    Les RFC citées précédemment sont obsolètes. Aujourd'hui, c'est la 3986 qui s'applique (http://tools.ietf.org/html/rfc3986).

    Donc la recommandation est d'utiliser l'UTF-8 pour écrire le chemin puis de convertir les caractères non ASCII en utilisant %?? où ?? est l'écriture hexadécimale de l'octet.
    On trouve une excellente explication et des tests sur une page du W3C : http://www.w3.org/International/articles/idn-and-iri/

    Les anciens navigateurs utilisaient le jeu de caractères de la page ou latin-1 (ISO-8859-1) et non UTF-8, ce qui rejettait bien des langues. Dans IE6, l'option "URL with UTF-8 encoding" est apparue. Dans IE7, cette option est activée par défaut. Les navigateurs Opera et Safari respectent aussi la RFC. Malheureusement Firefox en est apparement resté au niveau d'IE6 (du moins dans la configuration par défaut sous Windows).

    Pour illustrer mon propos : avec le lien http://serveur.fr/différentes voici ce que différents navigateurs envoient au serveur (requête HTTP GET).
    FF2 : http://serveur.fr/diff%E9rentes (config FF2.11 Windows par défaut)
    IE6 : http://serveur.fr/diff\xe9rentes
    IE7 : http://serveur.fr/diff%C3%A9rentes (Idem pour Safari et Opera)

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    NB: Quelque soit l'encodage :

    [client]
    L 'URI "http://serveur.fr/diff%E9rentes" est prise en charge ( vu dans la barre d'adresse ) avec easyPHP 1.8, ( Apache 1.3 ) sur windows... que ce soit :
    • FF 2.0.0.11
    • IE7
    • Safari 3.0.4



    [serveur]
    Par contre, quelque soit la version d'Apache sur Wamp ce type d'adresse est refusé.

    La question : Comment configurer Apache ?

    Remarque:
    1. J'ai supprimé les accents de mon système de fichier. ( fait )
    2. Je migre en 130 000 lignes en UTF-8 ( C'était prévu )
    3. J'ai peur que mes requêtes html échouent ( à voir )
    4. J'ai quelques caractères accentués encodés un fois de trop selon les navigateurs ( contourné )

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Conclusion
    1. Supprimer les accents des dossiers et fichiers
    2. Conserver vos fichiers en ANSI


    NotePad++ permet de convertir vos fichiers.

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut idem ici !
    Bonjour à tous, ceci est mon premier message sur ce forum. C'est un utilisateur d'un forum concurrent où j'avais posté exactement le même problème, auquel je ne trouve pas de solution.

    Ma config : Apache2 sur serveur Win2K3 (eh oui ... ).

    Je mets un fichier "identité.html" sur mon serveur. Via IE7, j'y accède sans aucun blème via :
    http://monserveur/identité.html
    Avec un accent dans la barre d'adresse, oui oui! ça tombe plutôt bien que IE7 propose cette option, parce que on a à peu près 8000 fichiers qui ont été importés dynamiquement, et le lien vers leur emplacement dans l'arborescence aussi .... et les scripts d'imports n'ont pas été customisés pour prendre en compte les accents.

    Y'a un truc bien dans ma situation : les fichiers "à problèmes" (ceux avec accents) ne s'accèdent pas directement, mais via des URLs stockées dans une base de données. Il me "suffit" donc de formater mes URLs correctement.

    Bref, jusqu'ici donc (et étant donné que je suis sur un Intranet et que seul IE7 est le browser officiel), tout fonctionne bien. Seul souci : les gros fichiers PDF (et il y en a beaucoup). IE7 "interprète" l'accent correctement (probablement en %c3%a9 mais en vérité je n'en sais rien) , commence le download puis "relaye" celui-ci à Adobe Reader, qui plante joyeusement car il ne trouve pas le fichier en question.

    Je dois donc trouver un moyen d'encoder mes URLs, et c'est comme ça que je suis tombé sur cet os :



    Vous me direz, j'ai qu'à encoder toutes mes URLs de la troisième manière mais j'ai un petit problème : certaines URLs ont été créées par d'autres scripts (php) qui utilisent la fonction rawurlencode(). Celle-ci encode d'office les "é" en %E9 , point à la ligne. Je n'ai pas trouvé comment encoder directement "correctement".

    L'IDEAL était de trouver une manière de faire comprendre au serveur que %E9 = é, mais visiblement si je comprends les réponses ci-dessus, ce n'est possible que moyennant une recompil Apache...
    Je poste ce message au cas où entretemps une solution existe de ce côté là, ou alors je me mettrai à la lourde tâche de convertir mes URLs mais sur ce point il me faudrait un petit coup de main pour l'encoding correct ...


Discussions similaires

  1. Activation automatique des liens hypertextes
    Par Vincent_59 dans le forum Word
    Réponses: 4
    Dernier message: 06/08/2008, 14h45
  2. Actualisations automatiques des liens dans mon script
    Par Geekolin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/01/2008, 14h01
  3. [AJAX] récupération automatique des liens
    Par 2kerhs dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/01/2007, 16h51
  4. Outil pour vérification automatique des liens
    Par zazaraignée dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/01/2005, 20h00

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