2012-08-23 4 views
0

J'utilise une réécriture d'url pour un site sur lequel je travaille actuellement. J'ai la ré-écriture fonctionne bien pour les nombres, les lettres et - en utilisant ceci:Regex avec des caractères spéciaux

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ characters.php?realm=$1&name=$2 [NC] 

Cependant, je dois la première partie de la règle pour permettre 'd'être autorisés, et je dois la deuxième partie de la règle pour permettre pour les caractères spéciaux tels que ú, æ, ä, ç, et à peu près tous les caractères situés here qui ressemblent à une lettre.

Je sais que les caractères spéciaux sont mauvais, mais je ne suis pas celui qui leur a permis d'être utilisé dans les noms de caractères. J'ai juste besoin qu'ils soient autorisés dans ma règle pour que les caractères avec ces noms puissent accéder à mon application.

Merci.

Edit: La première partie fonctionne maintenant. Expérimenter avec la deuxième partie en ce moment. Éditer # 2: Essayer les deux solutions pour la deuxième partie ([^ /] +) et exclure certains caractères permet à l'information d'afficher au lieu de provoquer une erreur 404. Cependant, il provoque mon CSS à ne pas être affiché, à la place, il essaie d'appeler/css/error au lieu de/css. Il provoque une boucle de redirection pour le fichier css selon chrome.

La seule façon dont quelque chose devrait être redirigé vers/error est si les données de caractères sont invalides. Cette application est utilisée pour extraire des informations de personnage du caractère blizzard api, il est donc essentiel que les caractères accentués puissent être utilisés dans la réécriture. Je ne suis pas sûr que cela soit important ou pas, mais quand je permets que ú soit inclus avec az et AZ, j'obtiens une erreur 404 indiquant que la page ne peut pas être trouvée mais au lieu d'afficher le ú il affiche ú à sa place.

+0

match contre "pas une barre oblique",^([^ /] +)/([^ /] +) $ –

+0

@shhac cela semble fonctionner, mais provoque une erreur étrange avec mon css. – akari

Répondre

0

^([a-zA-Z0-9 _'-] +)/([^ caractères exclus ici] +) $

ajoutant le "'" dans les premiers supports doivent permettre être apparié. En ce qui concerne la seconde partie, vous pouvez utiliser une classe de caractères annulée et répertorier les caractères que vous autorisez et non.

édité pour déplacer le guillemet simple avant le "-".

+0

Votre suggestion pour le premier provoque une erreur interne du serveur. – akari

+0

Mettez-le avant le "-", ou échapper le "-" comme "\ -". En outre, si le mouvement va être analysé par un langage, alors assurez-vous que la citation unique est échappée si c'est un délimiteur de chaîne dans votre langue. – Sako73

+0

Merci, la première partie fonctionne maintenant. – akari

0

La solution la plus simple que je pourrais trouver est que ú s'affiche par exemple, donc j'ai simplement inclus le º dans la règle. Je ne sais pas si c'est la meilleure façon, mais ça marche pour l'instant.

Questions connexes