Bonjour,

Je travaille sur des bases pays , region et ville au format Mysql et UTF8

Problème :
Lorsque je récupère un nom de région par exemple : Costa calida en espagne

il est pris au format UTF8 :Costa Cálida dans la base

il reste à ce format pour etre lu : Costa Cálida dans ma page

Mais quand il passe par l'url en variable pays=Espagne&region=Costa%20Cálida&place=&loc=
et que je le récupère pour interroger ma base
j'ai une erreur Mysql car soit ma variable part au format

SELECT regioncode FROM inter_region WHERE langagecode='fr' AND regionname='Costa Cálida'

Soit je met un
 $region=utf8_encode($region);
avant d'envoyer la requète
et dans ce cas ma variable devient

SELECT regioncode FROM inter_region WHERE langagecode='fr' AND regionname='Costa Cálida'

Quelqu'un peut-il m'aider dans ce casse tête SVP

Merci

Hugues
Modifié par papa22 (19 Feb 2008 - 15:01)
Bonjour,

papa22 a écrit :
il est pris au format UTF8 :Costa Cálida dans la base

Ben non, ça c'est pas de l'UTF-8. La base est peut-être en UTF-8, mais dans ce cas tu n'en tires pas partie car tu remplaces les caractères non ASCII par l'entité caractères (&225;) correspondante.
Florent V. a écrit :
Bonjour,


Ben non, ça c'est pas de l'UTF-8. La base est peut-être en UTF-8, mais dans ce cas tu n'en tires pas partie car tu remplaces les caractères non ASCII par l'entité caractères (&225;) correspondante.


Ben oui, d'accord, mais ça m'aide pas beaucoup.

La base est bien en uft-8 mais elle s'affiche (&225;) dans l'interface mysql
le code de page dans IE s'affiche aussi comme ça
question sachant que je ne fais aucun changement à part ces conversions automatiques comment est-ce que je peux reecrire ma variable passée par l'url lorsqu'elle part vers mysql pour qu'elle soit de format identique à celui de ma base d'ou elle vient

je repette que

utf8_encode($region);


ne fonctionne pas ou au moins pas tout seul

Merci d'un coup de pouce

Hugues
Alors:

1. À tout hasard, as-tu lu [Pré-requis] Notions de base sur l'encodage des caractères?

2. Ta base est en UTF-8, mais pas les données dedans (enfin, techniquement c'est de l'UTF-8 mais pour enregistrer un caractère non-ASCII tu n'utilises pas la valeur UTF-8 correspondante mais une entité caractère et donc uniquement des caractères ASCII). Il serait peut-être plus simple de travailler avec les données en UTF-8 dans la base, non?

3. utf8_encode() convertit une chaîne ISO-8859-1 en UTF-8. Donc ça ne va pas t'aider beaucoup non plus.

4. Il faudrait que tu trouves une fonction qui remplace les caractères non-ASCII par l'entité caractère équivalente. Je ne sais pas trop ce qu'il existe en PHP.

5. De plus, ça risque d'être difficile de passer &255; ou tout autre entité en paramètre d'une URL... je ne sais pas trop si ça passe.

6. Enfin, en général on ne fait pas une sélection en recherchant une chaine de caractères, mais en faisant un tri sur un identifiant numérique. Donc en GET tu aurais une URL du type:
script.php?pays=6&region=28

Tu n'as pas de table de tes régions avec un identifiant par région?
Modifié par Florent V. (19 Feb 2008 - 17:23)
Je commence à comprendre le PB

pour repondre à tes questions

les bases ne m'appartiennent pas elles sont mises à ma dispo par un autre site avec plusieurs milliers d'enregistrements

Je ne peux pas les remanier car elles me servent à communiquer avec le site d'origine

Il y a bien une possibilité d'utiliser un code par pays, par region ... mais je cherchais jsutement à faire des jolis liens sans Codepays=A125 mais avec ,france,alsace,strasbourg en url rewriting

donc en effet si j'ai bien compris tes explications, je suis à la recherche de la formule magique qui me transformera en phpCosta Cálida en ascii Costa Cálida
papa22 a écrit :
donc en effet si j'ai bien compris tes explications, je suis à la recherche de la formule magique qui me transformera en phpCosta Cálida en ascii Costa Cálida

Oui, sous réserve que:
- la fonction existe;
- il soit possible de passer &225; ou toute autre entité caractère dans une URL, ce dont je ne suis pas sûr.
Florent V. a écrit :

- il soit possible de passer &225; ou toute autre entité caractère dans une URL, ce dont je ne suis pas sûr.


ça ce n'est pas un problème puisque que je peux faire ma fonction après le passage de l'url et juste avant de d'envoyer la requète mysql,

Tu ne sais pas où je peux trouver ce type de fonction php (forum actif en français de préférence) ?