Encodage d'url

Signaler
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
-
Bonjour à tous,

Voilà j'ai une table pleine d'adresses URL : les adresse URL que mon site.
Par exemple si un internaute demande la page www.monsite.com/search.php?s=hello
ben ça va l'ajouter à ma table.

Mon problème, c'est que ma table est pleine d'url non encodée (les accents, caractères spéciaux etc... ne sont pas encodé en caractères html ou autres).

Maintenant, je veux utiliser ces adresses pour générer mon sitemap. Mais si je fais un simple 'echo' de toutes ces adresses, ben ça plante : les accents (et autres caractères spéciaux) ne sont pas encodés.
Que faire pour encoder une adresse, sachant que urlencode et rawurlencode vont me coder mes / ou - ou = ou & etc... en %quelque chose.
C'est pas logique : urlencode on lui passe une url, et il ressort quelque chose qui n'est pas une URL, je comprend pas à quoi sert cette fonction... Moi je veux juste coder les accents et caractères spéciaux (espaces etc...), la meme chose qui se passe quand dans la barre d'adresse du navigateur on tape un accent, c'est encodé.

Merci si vous avez des solutions

- MadMatt -

 www.choisir-une-entreprise.com

7 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello,

mettre un accent dans la barre d'url n'empêche pas de tomber sur la page normalement.
Ton problème ne viendrait pas plutôt du fait que les url sont stockées en utf8 et que tu les affiches en iso, ou inversement ?

Si tu n'y arrives pas, un exemple concret de ton problème serait le bienvenu.
Cecit dit et pour conclure, c'est à toi aussi de t'assurer si possible qu'il n'y a pas d'espace et de caractère spécial dans ton url.

à+
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
1
Salut,

Je ne vois pas en quoi c'est illogique, si tu avais pris la peine de lire la documentation tu verrais bien que ces fonctions la ne sont pas destinés à encoder une url entière, mais une partie (par exemple un argument) afin d'éviter des problèmes ;)
Voir: http://ca.php.net/manual/en/function.urlencode.php

Ensuite pour ton problème il y a deux solutions (à ma connaissance):
Soit tu encode bien avec urlencode, mais après avec un str replace tu remplace les %... qui représente les slashes par un vrai slash, idem pour tous les autres chars.

Sinon tu dois utiliser htmlentities qui va convertir tes accents en entitées html(et les & en &, comme ça pas de mélange d'arguments), du coup tes urls vont être correctes.

Mais comme dit Evangun, dans une url on essait le plus possible de ne pas mettre d'accents ou d'espace...

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Ben j'ai regardé pour etre certain : mes tables sont en ISO, et ma page générée est en UTF8, car il s'agit de générer un sitemap, donc pour que google l'accepte il faut que ça soit un fichier XML en UTF8.

Et comme les utilisateurs peuvent rechercher des mots avec des accents, ben la chaine cherchée est passée en parametre GET, donc dans l'url, donc j'ai pas trop le choix au niveau du format des adresses URL, ça peut etre n'importe quoi.

Seulement comme il s'agit d'un fichier sitemap, les adresses ne doivent pas etre encodées comme dans une page web (avec htmlentitites) si je ne me trompe pas ? Pas de & ? Il faut qu'elle soient codées comme dans la barre d'adresse du navigateur ?
(j'avoue que je suis un peu perdu sur ce point)

En fait on peut résumer le problème comme ça :
j'ai des adresses "brutes" (non encodées) et je doit les placer dans mon sitemap, comment les encoder ?
(du moins y'a t'il une méthode moins "bourrine" que de faire des str_replace sur les caractères spéciaux ?)

Merci !

- MadMatt -

 www.choisir-une-entreprise.com
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Arf et y'a un truc que je comprend pas, c'est quand moi je fais une recherche sur le site
(je vous le donne si vous voulez regarder :
http://www.choisir-une-entreprise.com/annuaire.php
et le sitemap :
http://www.choisir-une-entreprise.com/sitemap.xml
)

ben si je recherche "hé", ça va enregistrer "www.choisir-une-entreprise.com/annuaire.php?s=h%E9" dans la BDD, c'est bien.
Mais pourquoi alors y'a des entrées ou les espaces sont codés, et pas les accents.
Par exemple j'ai des adresses :
http://www.choisir-une-entreprise.com/annuaire.php?s=énergie%20renouvelable
Alors que si moi je fais la recherche ben ça m'encode bien l'accent (dans la barre de recherche du navigateur ET dans la BDD), ça vient du navigateur ça ?

Merci pour votre aide

- MadMatt -

 www.choisir-une-entreprise.com
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
1
Salut,

Pour le sitemap je ne peux pas t'aider, j'en sais rien de ce qui est accepté ou pas.
Pour ta deuxième question oui ça vient du navigateur, certain encode selon la RFC 1738 et d'autres non. J'ai déja remarqué ce genre d'incohérence moi aussi, c'est ça quand un navigateur respecte pas les fameux standards

Moi je ferais ça à grand coup de str_replace Ou j'isolerais les arguments de l'url et je les encoderait un par un avant de reconstruire l'url. Mais cela dit je vais suivre ce topic avec intérêt parce qu'il est pas impossible (mais bon c'est peu probable) qu'une fonction php existe déja pour faire ça...

Avant de passer ça dans ta base de données à l'avenir tu devrais passer tout tes arguments à urlencode et reconstruire ton url, ça va t'éviter ce genre de problèmes..

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Avant de passer ça dans ta base de données à l'avenir tu devrais passer
tout tes arguments à urlencode et reconstruire ton url, ça va t'éviter
ce genre de problèmes..



Oui effectivement, c'est plus judicieux, mais j'avais aucune idée de cette problématique avant de réaliser ce script, donc je me suis un peu fait avoir :-p

Pour ta deuxième question oui ça vient du navigateur, certain encode
selon la RFC 1738 et d'autres non. J'ai déja remarqué ce genre
d'incohérence moi aussi, c'est ça quand un navigateur respecte pas les
fameux standards

Arf... Et y'a pas moyen de détecter l'encodage ?

Bon ben je crois que ça va être plein de str_replace de partout, si quelqu'un a une meilleure idée qu'il me fasse signe
Merci

- MadMatt -

 www.choisir-une-entreprise.com
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
1
Pour infos str_replace prends en arguments des arrays, donc un seul str_replace suffierait Mais moi ce que j'aimerais c'est d'avoir l'avis de codefalse, coucou747(tien, dans une de ses sources justement il utilisait str_replace pour ça), neigedhiver ou malalam par exemple. Cela dit je n'ose pas les "déranger" pour ça, mais je t'invite à leurs envoyés un MP, si quelqu'un à la bonne solution, c'est bien l'un d'eux

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org