Salut,
Alors, premièrement, pour le "?" c'est normal, et il n'y a rien à faire à ma connaissance, l'explication est simple:
dans une url, le "?" indique la fin de l'url réelle et le début des arguements, par exemple:
http://monsite.com/mapage?test=1&test2=2
l'url réelle est http://monsite.com/mapage et les variables passées par l'url sont test = 1 et test2 = 2 (en php $_GET['test'] == 1)
Pour les apostrophes, le problème est a peu près pareille: il ne sont pas toléré dans les url,
Explication:
imaginez l'url suivante: http://monsite.com/titre'test
Et maintenant, on créé un lien en html avec:
<a href='http://monsite.com/titre'test' />
la navigateur ne comprendra pas l'apostrophe, puisqu'il cloture la fin de l'url ( href='URL' ).
quand votre utilisateur cliquera sur le lien, il ne verra que http://monsite.com/titre et pas le reste
Par commodité, donc, on n'accepte que les caractères alphanumérique dans une url, ainsi que les "-", les "_", et les % pour les caractères encodés.
D'autre cratères sont autorisés mais à éviter ( {}[]|, l'espace, et la plupart des caractères spéciaux ou accentués...) car ils peuvent pauser problème avec d'autres langages (xml, .net, json ...). à utiliser avec parcimonie et précaution donc.
pour finir, les caractères strictement interdits sont: ? & # @ ' et " (puisqu'il ont une réel signification dans un url (ou en html pour les guillemets)) (j'en oublie peut être), si vous en avez besoin, il faut !ABSOLUMENT! les encoder (voir ci-desous - mais normalement pas besoin, le slug est mieux)
Les solutions à utiliser:
1) les url slugifiées (supprimera les caractères spéciaux en les remplaçant par des "-", et remplace les caractères accentués par leur équivalent sans accents)
par exemple le titre "C'est un têst ?" deviendra "c-est-un-test", "cest-un-test" ou "c-est-un-test-" (selon la fonction que vous utiliserez)
ou 2) les url encodées (fonction php urlencode()): par exemple "C'est un têst ?" deviendra "C%27est%20un%20test%20%3F"
Vous l'aurez compris, la meilleurs pratique est d'utiliser le slug (bien plus lisible), mais il n'existe pas de fonction par défaut dans php, il faut la faire soit même (recherche google, c'est vite fait )
Et pour finir, voici un petit récap:
http://coin.des.experts.pagesperso-o...s/faq9_29.html
et un autre, plus complet, mais en anglais:
http://www.url-encode-decode.com/
En esperant vous avoir éclairé/aidé
[Résolu] si c'est le cas
Bonne journée.
--
BAVARO12, tu as un problème supplémentaire:
ta règle de réécriture n'acceptera pas les caractères encodés:
RewriteRule ^blog/actualite/([0-9]+)/([0-9a-zA-Z_-]+)\.html$
Signifie:
1) doit COMMENCER par blog/actualite/
2) suivis de chiffres autant que tu veux
3) suivis de /
4) suivis de chiffre/lettre minuscule/majuscule - ou _ autant que tu veux
5) et FINIR par .html
Rien de défini, donc, pour les caractères spéciaux/encodées.
Par contre tu n'aura aucun problème si tu utilise les slugs
Partager