Php urlencode et Apache RewriteRule = 403 Forbidden

Nouveau WRInaute
Bonjour,

Je n'arrive pas à encoder mes accents pour les passer dans les URLs.

Je récapitule mon pb du moment:

Je développe un site allemand, donc avec plein de umlauts (ü, ö, ä, ÿ).
Je fais tourner ça sous un M.V.C PHP simple (voilà le contrôleur frontal):

$module = dirname(__FILE__).'/modules/'.htmlspecialchars($_GET['module'].'/');
//
$action = (isset($_GET['action'])) ? htmlspecialchars($_GET['action']).'.php' : 'index.php';
//
if(file_exists($module.$action)){
include($module.$action);
}else{
//echo $module.$action.'.php not found'."<br />";
include('global/home.php');
}

J'ai mis en place un menu dynamique qui va chercher certains fichiers pour en afficher le nom dans les sous-menus (avec plein de ä ou de ö).

J'ai mis en place une réécriture d'URL:

RewriteRule ^admin-([a-z_]+)-([a-zA-Z0-9\._]+)\.html index.php?module=admin&action=$1&section=$2 [L]

Si je laisse mes accents (ä, ö, ü...) Apache ne comprend rien, et si je tente d'encoder mon paramètre avec urlencode(), Apache m'affiche un gros 403...

Quelqu'un de méga charitable pour m'aider ?
Merci d'avance
Sébastien
 
WRInaute accro
Déjà pour un site allemand, je te conseillerais de faire à l'allemande, c'est à dire de transformer une fois pour toute les caractères accentués en leur équivalent typpographique sans umlauts :
ö -> oe
ü -> ue
ä -> ae
ÿ... t'es sûr ? A ma connaissance, en allemand, ça n'existe pas.

L'avantage est d'avoir des urls propres dans les caractères bizarres. Switcher de l'un à l'autre est un réflexe, et tu remarqueras que Google gère assez bien les équivalences.

Deuxièmement, il me semble que tu devrais dans la conception de ton appli différencier le nom du fichier de son affichage dans le menu

Troisièmement, la conversion en caractères lisibles pour les browsers, ce n'est pas htmlentities mais urlencode.
 
WRInaute accro
HTML entities va donner des &acutre; &amp; qui ne sont pas les caractères qui sont utilisées dans les urls pour remplacer les caractères spéciaux

Le Manuel PHP a dit:
des séquences commençant par un caractère pourcentage (%), suivi de deux chiffres hexadécimaux. Les espaces sont remplacés par des signes plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les formulaires HTML. Le type MIME est application/x-www-form-urlencoded. Ce codage est différent de celui spécifié dans la » RFC 3986 (voir rawurlencode()) : pour des raisons historiques, les espaces sont remplacés par des signes plus (+).
 
Nouveau WRInaute
Marie-Aude a dit:
Troisièmement, la conversion en caractères lisibles pour les browsers, ce n'est pas htmlentities mais urlencode.

C'est bien urlencode() que j'utilise oui.

Pour ce qui est de ae ou oe, je profite du fait que tu semble avoir un peu d'expérience :) : Il vaut mieux les utiliser directement plutôt que de chercher à utiliser &oelig; etc... n'est-ce pas ?

AU fait, bien que ne parlant pas allemand moi même et n'en ayant pas rencontré, &yuml existe bien oui.

Bon pour autant, je ne sais toujours pas pourquoi Apache me renvoie un 403 dès que je tente d'encoder mes paramètres d'url...?

EN plus La question que je me pose (je sais que ça déborde un peu du cadre), comment afficher mes menus dynamiques avec mes umlauts si je vire mes accents de mes fichiers et répertoires ? Obligé de passer par un tableau de correspondances ?
Merci pour ces réponses
 
WRInaute accro
Je ne vois pas d'urlencode() dans le code que tu as mis ?

tu utilises ö (en utf8) ou son équivalent en html entitities dans le texte, et oe dans les urls

ÿ existe en général. A ma connaissance pas en allemand, ou alors pour des noms propres étrangers. En revanche, ça existe en français ^^ ( D'ailleurs ce n'est même pas mentionné ici http://de.wiktionary.org/wiki/Wiktionary:Hauptseite )

Oui tu fonctionnes avec une table de correspondance.
 
Discussions similaires
Haut