Remplacer des caractères inapropriés

Petit nouveau ! | 1 Messages

25 juil. 2014, 16:18

Je débute vraiment en php... et je commence à désespérer.
Pour un projet technique de formation professionnelle, nous devons placer des points (récupérer sur un serveur via URL) sur une map et faire remonter des informations au survol de ces points.
Nous avons réussi mais un détail nous échappe concernant l’interprétation de certains caractères.
<?php
$url = "http://www.velo-vision.com/vannes/oybike/stands.nsf/getsite?site=vannes&format=json&key=veolia";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
//echo "Mon organisation est : ". $json_data["org"];
//var_dump($json_data);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vélo à Vannes</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox.js/v1.6.3/mapbox.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox.js/v1.6.3/mapbox.css' rel='stylesheet' />
<style>
  body { margin:0; padding:0; }
  #map { position:absolute; top:0; bottom:0; width:100%; }
</style>
</head>
<body>


<div id='map'></div>

<script>
var map = L.mapbox.map('map', 'vlsproject.iaoe0mh9')
  .setView([47.648, -2.7583], 14);
  map.scrollWheelZoom.disable();
var myLayer = L.mapbox.featureLayer().addTo(map);

var geojson = {
    type: 'FeatureCollection',
    features: [
    <?php 
    foreach($json_data["stand"] as $id => $value):
	//echo $value["name"]." sa disponibilite : ".$value["disp"]." sa position : logitude =".$value["lng"]." et latitude = ".$value["lat"]."<br>";
	?>
	{
        type: 'Feature',
        properties: {
            title: '<?php echo "Station : ".$value["name"]; ?>',
			'description': '<?php echo $value["ac"]." emplacements disponibles"."<br>".$value["ab"]." vélos disponibles"."<br>"; ?>',
            'marker-color': '#501E72',
            'marker-size': 'large',
            'marker-symbol': 'bicycle',
            url: '<?php echo $value["name"]; ?>'
        },
        geometry: {
            type: 'Point',
            coordinates: [<?php echo $value["lng"]; ?>, <?php echo $value["lat"]; ?>]
        }
    }, <?php endforeach; ?>]
};

myLayer.setGeoJSON(geojson);
myLayer.on('mouseover', function(e) {
    e.layer.openPopup();
});
myLayer.on('mouseout', function(e) {
    e.layer.closePopup();
});
</script>
</body>
</html>
<?php exit; ?>


Au survol, nous avons des + qui remplace les espaces et d'autres caractères pour les accents ... Nous souhaiterions corriger ces erreurs

Je suis vraiment novice et j'espère que qq'un pour m'accompagner dans le calme et la bonne humeur :-)
Désolé par avance si ma pratique sur le forum n'est pas la bonne.

Sébastien

Mammouth du PHP | 2278 Messages

25 juil. 2014, 18:55

Commençons par le style de la question:
Rien à dire: titre clair, code correctement encadré, question bien formulée.
Ce ne serait pas simplement un problème d'encodage?
On peut tester dans le navigateur (c'est dans Afficher Encodage chez Opera et Affkichage encodage chez Firefox...)
Le + semble remplacer un espace.
Le reste des codes : les codes UTF8 cf : http://www.utf8-chartable.de/
On pourrait s'en tirer pas str_replace, mais peut-être un autre a-t-il une meilleure idée?
html_entity_decode ne fait pas l'affaire

je pars de ton $json
$json = urldecode($json);
ca fournit de l'UTF
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD