Problème d'encodage de chaines dans les url

Nouveau WRInaute
Bonjour à tous,

J'ai précédemment cherché, mais pas trouvé de solution à mon problème.

En fait j'ai récemment installé un système de génération dynamique du sitemap de mon site. C'est à dire que chaque page demandée par un visiteur est enregistrée dans une table. Ensuite quand on demande mon sitemap.xml, je le génère à la volée grace à mon script dans sitemap.php.
Tout cela marche bien, excepté que je remarque dans mon sitemap des url formatée bizarrement. Et elles sont pareil dans la base de données, donc j'en déduis que c'est au moment de récupérer l'url pour l'enregistrer dans la base de données que y'a un problème.

Ces url bizarre sont formées avec le moteur de recherche. Il s'agit d'un formulaire qui fonctionne en GET (et pas en post pour pouvoir référencer les pages résultat).
Par exemple si je recherche "aérothermie", je vais bien avoir dans mon sitemap l'adresse de la forme :
http://www.choisir-une-entreprise.com/annuaire.php?s=a%E9rothermie

Mais j'ai remarqué qu'il y a aussi l'adresse suivante de référencée :
http://www.choisir-une-entreprise.com/annuaire.php?s=a%EF%BF%BDrothermie

Et quand on visite la dernière page, on se rend compte que l'encodage ne marche pas, ça me met plein de caractères bizarres.

Donc ma question, c'est pourquoi l'url est-elle encodée de cette façon sur certaines url, cela dépend-il du navigateur ? de l'encodage de ma page ? ou alors de mon script PHP qui récupère l'url ?

Voici le script au passage :
// Ajoute un site au sitemap
function Sitemap_AddSite( $Url ) {
$DateAjout = date('Y-m-d');
$req = "INSERT INTO sitemap
(Url, SitemapFile, DateAjout, DateAffichage)
VALUES
('$Url', '" . SITEMAP . "', '$DateAjout', '$DateAjout')";
$result = mysql_query($req);
}


$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
Sitemap_AddSite($url);


PS : j'ai mis les liens vers mon vrai site, c'est pour que vous puissiez voir le résultat, je n'ai que peu d'intérêt à faire de la pub pour mon site de cette façon.

Merci !

Matthieu :? :D
 
WRInaute impliqué
RFC 1738 (Uniform Resource Locators (URL)) : http://www.faqs.org/rfcs/rfc1738.html

Paragraphe 2.2.: URL Character Encoding Issues

:lol:

En résumé, c'est un standard. Les caractères spéciaux dans une URL sont encodés par "%" + le code hexadécimal du caractère.
Si tu ne présentes pas tes URLs ainsi, les navigateurs le font.
 
Nouveau WRInaute
Merci, je sais lol, relis ce que j'ai écris :

J'ai une forme d'adresse correcte avec encodage en "% + code héxa" correct, mais j'ai également des adresses (pour les mêmes pages) ou l'encodage est de la même forme, mais différent.
Et dans cette seconde forme, ça me donne des adresses qui ne marchent pas, ou alors qui me génèrent des erreurs.
 
WRInaute impliqué
Dans l'exemple que tu donnes, la deuxième URL semble provenir d'un client un peu fou-fou. A priori, c'est un navigateur qui voudrait tout traiter en UTF-8, et qui n'arrive pas à interpréter le "e accent aigu", donc il le remplace et t'envoie le "replacement character" UTF-8 (cf http://en.wikipedia.org/wiki/Replacement_character ).
Ce caractère spécial est effectivement codé "0xEF 0xBF 0xBD".

Tu n'as rien en UTF-8 de ton côté? Ni base de données, ni dans le PHP?
Dans ce cas, c'est un visiteur qui a un navigateur bien étrange.

Si ça cause des erreurs de ton côté, tu peux toujours essayer un utf8_decode() sur la chaine recherchée. Ca ne renverra aucun résultat à priori, mais ça ne devrait pas causer d'erreurs.
 
Nouveau WRInaute
Dacc merci bien, au moins l'erreur ne provient pas de mon site (rien en utf8 nulle part de mon côté).

Bonne journée
 
Discussions similaires
Haut