Bonjour à tous,

Mon script fonctionnait parfaitement, mais depuis quelques semaines la carte ne s'affiche plus et j'ai les erreurs suivantes :

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : AttValue: " or ' expected in ...
Warning: SimpleXMLElement::__construct(): lor: #fff; color: #000; }</style></head><body><div><table><tr><td><b><font face= in...
Warning: SimpleXMLElement::__construct(): ^ in...
Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : attributes construct error in...
J'imagine que les adresses passées en paramètres coincent quelque part. Elles sont formatées avec les fonctions suivantes :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
//lecture BDD
while($row = mysql_fetch_assoc($sql)){
    $adresse_dom = $row['adresse'].', '.$row['code_postal'].' '.$row['ville']. ', '.$row['pays'];
    $coords_dom = get_coordonees_from_adresse($adresse_dom); //un tableau [adresse latitude longitude]
    $lon = round($coords_dom[0]['longitude'],5);
    $lat = round($coords_dom[0]['latitude'],5);
}
 
 
function get_coordonees_from_adresse($adresse)
{
  $api_key = 'xxxxxxxxxxxxxxxxxxxxxxxx';
  $adresse = urlencode(formate_adresse($adresse));
  //echo $adresse."<br>";
  $url = 'http://maps.google.com/maps/geo?q=' . $adresse . '&output=xml&oe=utf8&gl=fr&sensor=false&key=' . $api_key;
  //$fp = fsockopen ($url, 80, $errno, $errstr, 30);
  //$page = file_get_contents($url);
  $page =  http_fetch_url($url);
  // Parse le résultat XML
  $xml_result = new SimpleXMLElement(stripslashes($page));
  // Vérifie que la requête a réussi
  if ($xml_result->Response->Status->code != 200) return array();
  // Charge les adresses
  $adresses = array();
  foreach ($xml_result->Response->Placemark as $place) {
    list($longitude, $latitude, $altitude) = explode(',', $place->Point->coordinates);
    // Ajoute au tableau
    $adresses[] = array('adresse_complete' => utf8_decode($place->address),
             'latitude' => $latitude,
             'longitude' => $longitude);
  }
  return $adresses;
} 
 
 
function formate_adresse($adresse){
$adresse = trim(preg_replace('/ +/', ' ', mb_ereg_replace('[^0-9A-Za-z\p{L}]+', ' ', $adresse)));
$bad = array(" r ", " av ", " ave ", " bld ", " bd ", " imp ");
$good = array(" rue ", " avenue ", " avenue ", " boulevard ", " boulevard ", " impasse ");
return str_replace($bad, $good, strtolower($adresse));	
}
//curl
function http_fetch_url($url, $timeout = 10)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

Précision : le plantage se produit sur la carte monde avec les adresses étrangères. Pour la France, c'est bon.
Les warnings concernent la ligne : $xml_result = new SimpleXMLElement(stripslashes($page));.
Est-ce que quelque chose a changé sur Google Map API ?
Merci de vos lumières.