Bonjour à tous,
Je me permets de vous solliciter pour un problème qui m'est incompréhensible et pour lequel j'aimerais que vous m'éclairiez.
Je possède une page sur un site qui me permet d'afficher les agences d'une entreprise à la googlemaps. J'utilise le géocoding de yahoo qui est plus pertinent et plus précis et me permets de récupérer la latitude et la longitude terrestre d'une adresse. Tout fonctionnait correctement depuis 6 mois, et depuis peu, j'ai des erreurs file_get_contents qui s'affichent : Warning: file_get_contents(url) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request.
L'url du file_get_contents est du type : http://api.local.yahoo.com/MapsService/V1/geocode?appid=yahoo_05e982f0 ... &location=
Le paramètre location est rempli correctement et est du type : adresse, CP ville, Pays. Les 4 valeurs sont concaténées et transformées avec rawurlencode et donc avec des %20 pour les espaces, des %E9 pour les "é" ....
Mon problème est le suivant : Je me suis aperçu que les erreurs file_get_contents étaient dûes au faite que dans certaines adresses, il y avait des accents du genre (54%20avenue%20Saint%20Andr%E9). A partir de ce moment, je me suis dis qu'il s'agissait d'une problème d'encodage. Mais pourquoi, et pourquoi cela a changé de fonctionnement ?
Après quelques tests, je me suis créé un petit fichier test avec une adresse contenant un accent avec le code suivant :
Pour tester, je me suis créer deux fichiers : un premier fichier enregistré en iso-8859-1 et un autre fichier enregistré en utf-8 avec bien entendu exactement le même code cité ci-dessus. L'erreur apparaît alors dans le premier cas (iso-8859-1) mais pas dans le second cas (utf-8). Bizarre, d'autant plus, que l'adresse est encodée en rawurlencode. Je me suis dis alors qu'il s'agissait peut être d'une mauvaise configuration serveur mais pas du tout puisque ces deux cas sont identiques sur 2 serveurs apache en php5 et 1 serveur php4.
Enfin, j'ai gardé mes deux fichiers tels quels et j'ai testé avec un htaccess possédant le paramètre AddDefaultCharset UTF-8 et en suite avec un AddDefaultCharset ISO-8859-1 mais rien n'y fait. Le premier cas ne fonctionne pas tandis que le deuxième cas fonctionne.
Bien entendu, si l'adresse ne possède pas d'accents, les deux cas (iso et utf) fonctionnent.
Alors :
1 - Pourquoi une telle différence de fonctionnement en iso et utf-8 dans la mesure où l'adresse est encodée en rawurlencode ?
2 - Est ce que yahoo aurait changé des choses de leur coté ?
3 - pourquoi y aurait-il eu un changement de fonctionnement ?
Merci par avance de votre aide.
Je me permets de vous solliciter pour un problème qui m'est incompréhensible et pour lequel j'aimerais que vous m'éclairiez.
Je possède une page sur un site qui me permet d'afficher les agences d'une entreprise à la googlemaps. J'utilise le géocoding de yahoo qui est plus pertinent et plus précis et me permets de récupérer la latitude et la longitude terrestre d'une adresse. Tout fonctionnait correctement depuis 6 mois, et depuis peu, j'ai des erreurs file_get_contents qui s'affichent : Warning: file_get_contents(url) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request.
L'url du file_get_contents est du type : http://api.local.yahoo.com/MapsService/V1/geocode?appid=yahoo_05e982f0 ... &location=
Le paramètre location est rempli correctement et est du type : adresse, CP ville, Pays. Les 4 valeurs sont concaténées et transformées avec rawurlencode et donc avec des %20 pour les espaces, des %E9 pour les "é" ....
Mon problème est le suivant : Je me suis aperçu que les erreurs file_get_contents étaient dûes au faite que dans certaines adresses, il y avait des accents du genre (54%20avenue%20Saint%20Andr%E9). A partir de ce moment, je me suis dis qu'il s'agissait d'une problème d'encodage. Mais pourquoi, et pourquoi cela a changé de fonctionnement ?
Après quelques tests, je me suis créé un petit fichier test avec une adresse contenant un accent avec le code suivant :
Code:
<?php
$address = strtolower("Cour Napoléon, 75001 Paris");
$url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
$url .= sprintf('?appid=%s&location=%s',"yahoo_ab67cd17a7",rawurlencode($address));
$result = false;
if($result = file_get_contents($url)) {
preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $result, $match);
if (isset($match) ) {
$geocode = array('latitude' => $match[1],'longitude' => $match[2]);
echo($geocode['latitude'].", ".$geocode['longitude']);
}
}
?>
Pour tester, je me suis créer deux fichiers : un premier fichier enregistré en iso-8859-1 et un autre fichier enregistré en utf-8 avec bien entendu exactement le même code cité ci-dessus. L'erreur apparaît alors dans le premier cas (iso-8859-1) mais pas dans le second cas (utf-8). Bizarre, d'autant plus, que l'adresse est encodée en rawurlencode. Je me suis dis alors qu'il s'agissait peut être d'une mauvaise configuration serveur mais pas du tout puisque ces deux cas sont identiques sur 2 serveurs apache en php5 et 1 serveur php4.
Enfin, j'ai gardé mes deux fichiers tels quels et j'ai testé avec un htaccess possédant le paramètre AddDefaultCharset UTF-8 et en suite avec un AddDefaultCharset ISO-8859-1 mais rien n'y fait. Le premier cas ne fonctionne pas tandis que le deuxième cas fonctionne.
Bien entendu, si l'adresse ne possède pas d'accents, les deux cas (iso et utf) fonctionnent.
Alors :
1 - Pourquoi une telle différence de fonctionnement en iso et utf-8 dans la mesure où l'adresse est encodée en rawurlencode ?
2 - Est ce que yahoo aurait changé des choses de leur coté ?
3 - pourquoi y aurait-il eu un changement de fonctionnement ?
Merci par avance de votre aide.