Pages :
Bonjour

J'ai ceci :

 
$filename = "../sallesDesMachines/plan.inc.php";
if (file_exists($filename)) include($filename);
if(isset($_GET["NumeroRencontre"])){
	$NumeroRencontre =trim(strip_tags(htmlentities($_GET["NumeroRencontre"])));
	if(ctype_digit($NumeroRencontre) && strlen($NumeroRencontre)==8){
		$ChercheRencontreParNumero->execute(array($NumeroRencontre));
		$ligne = $ChercheRencontreParNumero->fetchAll(PDO::FETCH_ASSOC);
		$NombreDeLignes=count($ligne);
		var_dump($ligne);
		if(!empty($ligne)){
			echo json_encode($ligne);
		}
	}}


Le résultat du var_dump :


array (size=1)
  0 => 
    array (size=21)
      'date' => string '2008-09-28' (length=10)
      'Stade' => null
      'Terrain' => null
      'Lieu' => string 'AVENUE DE PARIS' (length=15)
      'Ville' => string '79260 LA CRECHE' (length=15)
      'SaisieDistance' => string '13' (length=2)
      'equipelocalesaisie' => string 'La Crèche 2' (length=12)
      'equipevisiteusesaisie' => string 'St Maxire AV S 2' (length=16)
      'competition' => string '4ÈME DIVISION' (length=14)
      'choix_journee' => string '' (length=0)
      'choix_poste' => string 'Arbitre centre' (length=14)
      'NomArbitre' => null
      'NomAssistant1' => null
      'NomAssistant2' => null
      'ArbitreRemplacant' => null
      'NomDeleguePrincipal' => null
      'NomDelegueAjoint' => null
      'NomDelegueAccompagnateur' => null
      'ObservateurPrincipal' => null
      'ObservateurAdjoint1' => null
      'ObservateurAdjoint2' => null


On remarque que les accents sont bons.

Par contre le résultat du json_encode

[{"date":"2008-09-28","Stade":null,"Terrain":null,"Lieu":"AVENUE DE PARIS","Ville":"79260 LA CRECHE","SaisieDistance":"13","equipelocalesaisie":"La Cr\u00e8che 2","equipevisiteusesaisie":"St Maxire AV S 2","competition":"4\u00c8ME DIVISION","choix_journee":"","choix_poste":"Arbitre centre","NomArbitre":null,"NomAssistant1":null,"NomAssistant2":null,"ArbitreRemplacant":null,"NomDeleguePrincipal":null,"NomDelegueAjoint":null,"NomDelegueAccompagnateur":null,[...]


On voit des problèmes au niveau des accents. Je me suis dit que c'est peut-être normal, mais il y a une erreur quand je récupère le résultat en js :

		texte=file('http://localhost/football2/sallesDesMachines/synchro.inc.php?NumeroRencontre='+escape(numero));
        file(texte);
		myJsonObj = JSON.parse(texte);



Erreur : SyntaxError: JSON.parse: unexpected character
Ligne : 3

Merci pour vos conseils
Modifié par ledisciple1 (14 Oct 2013 - 08:01)
Bonjour,

La doc php indique :
"Toutes les chaînes doivent être encodées UTF-8. "

Qu'elle est l'encodage de ta chaine de caractère $ligne ? Une conversion via utf8_encode peut être pour régler le problème.
Bonsoir à toutes et à tous.

Juste une question ? Pourquoi faire un encodage "UTF-8" en Php ?

Je pense, avant de faire une conversion en PHP, que vous devez vérifier que la base de données, pour tout ce qui est chaines de caractères est bien en "utf-8".

Que votre document, est lui aussi en "utf-8". Je parle de la codification du document lors de sa sauvegarde.
Je travaille avec notepad++ et il existe soit le paramétrage qui permet de faire en sorte que lors d'une nouvelle création d'un document php ou autre, le codage se fasse en "utf-8", mais il y a aussi la conversion dans le bon encodage, avec sauvegarde.

De même, au niveau apache, assurez-vous que votre page soit interprété aussi en "utf-8".

Vous pouvez aussi, dans votre document, ajouter "<meta charset="utf-8" />" si vous voulez vous assurer du bon encodage.

L'encodage en Php est nécessaire que si l'un des points suivants n'est pas en "utf-8" et nécessite alors un changement de codification.

@+
Bonjour ledisciple1.

La solution ne se trouve pas forcément dans ton code, comme tu sembles le croire.
Si je me suis permis de te donner ces conseils, c'est que ton problème de conversion n'est pas forcément nécessaire car dans la chaîne du traitement de tes caractères, il y a quelque chose qui n'est pas en UTF-8.

Donc, c'est à toi de vérifier sur ton ordinateur les différents points que je soulève.

Vu comme tu exposes ton problème, je n'ai pas de solution toute faite à te donner.

@+
tournikoti a écrit :
Bonsoir à toutes et à tous.

Je pense, avant de faire une conversion en PHP, que vous devez vérifier que la base de données, pour tout ce qui est chaines de caractères est bien en &quot;utf-8&quot;.

Toutes mes tables sont bien
ENGINE=InnoDB DEFAULT CHARSET=utf8


tournikoti a écrit :

Que votre document, est lui aussi en &quot;utf-8&quot;. Je parle de la codification du document lors de sa sauvegarde.


J'ai repris chaque fichier avec bloc note. Oui, c'est simpliste, mais ça permet de faire la même chose. Et oui, j'avais bien tout mis en utf-8

tournikoti a écrit :

De même, au niveau apache, assurez-vous que votre page soit interprété aussi en &quot;utf-8&quot;.

là, par contre, je n'ai pas regardé ...

tournikoti a écrit :

Vous pouvez aussi, dans votre document, ajouter &quot;&lt;meta charset=&quot;utf-8&quot; /&gt;&quot; si vous voulez vous assurer du bon encodage.


Je l'avais mis, mais je ne sais pas si c'est sensible à la casse. je l'ai mis en majuscules.

Bon sang, qu'es ce que j'ai pu oublier d'autre ... Smiley eek Smiley decu Smiley ohwell
J'ai même ceci :
$PARAM_hote = "localhost";
$PARAM_nom_bd = "football";
$PARAM_utilisateur = "root";
$PARAM_mot_passe= "";
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
$connexion = new PDO("mysql:host=$PARAM_hote;dbname=$PARAM_nom_bd", $PARAM_utilisateur, $PARAM_mot_passe,$options);
Regarde dans ton navigateur qu'elle encodage il utilise.
Sur Firefox : développement web > encodage des caractères

Si ce n'est pas utf-8, essaie en rajoutant ce code dans un fichier .htaccess à la racine de ton site.
AddDefaultCharset UTF-8

Modifié par benj (17 Oct 2013 - 14:28)
Bonsoir LeDisciple1.

Ce sont des pistes de recherches !

Un jour, j'ai été confronté au même problème que toi et pourtant j'avais tout vérifié ! Impossible de comprendre d'où venait le problème.

Alors j'ai fait des tests dans tous les cas de figures. Et j'ai constaté que je ne regardais pas au bonne endroit dans ma base de données. Dans une de mes tables, là où il y a marqué "interclassement", j'avais autre chose de "utf8_general_ci". J'ignore comment ce paramètre n'était pas à la bonne valeur.
J'ai cru, comme toi, que la valeur par défaut était la même dans toutes mes tables.

ENGINE=InnoDB DEFAULT CHARSET=utf8

@+
Salut disciple,

Je confirme qu'avec ta config DB et PDO, TOUS les fichiers réellement encodés en UTF-8 et les en-têtes HTTP qui vont bien, je ne fais aucune conversion côté PHP...

Si tu as vérifié DB, PDO et fichiers PHP, il te reste à checker les en-têtes ? Smiley ohwell

tm
bon bon
je vais mettre autant d'image que possible ...
On va le trouver ce problème non mais !
upload/51762-Capturerbd.PNG
upload/51762-Capturerbd.PNG
upload/51762-informatio.PNG
upload/51762-json.PNG
Modifié par ledisciple1 (18 Oct 2013 - 17:30)
C'est quoi cette fonction javascript file ? As tu fait un console.log(text); après la récupération de ton fichier ?
benj a écrit :
C'est quoi cette fonction javascript file ? As tu fait un console.log(text); après la récupération de ton fichier ?

oui, les données sont bien reçues
Bon, j'ai trouvé d'où cela vient, mais pas comment résoudre

Ceci provoque l'erreur dont je parle à mon premier post soit JSON.parse: unexpected character
texte=file('http://localhost/football2/sallesDesMachines/synchro.inc.php?NumeroRencontre='+escape(numero));
console.log(texte);
myJsonObj = JSON.parse(texte);


console.log :
"[{"date":"2008-09-28","Stade":null,"Terrain":null,"Lieu":"AVENUE DE PARIS","Ville":"79260 LA CRECHE","SaisieDistance":"13","equipelocalesaisie":"La Cr\u00e8che 2","equipevisiteusesaisie":"St Maxire AV S 2","competition":"4\u00c8ME DIVISION","choix_journee":"","choix_poste":"Arbitre centre","NomArbitre":null,"NomAssistant1":null,"NomAssistant2":null,"ArbitreRemplacant":null,"NomDeleguePrincipal":null,"NomDelegueAjoint":null,"NomDelegueAccompagnateur":null,"ObservateurPrincipal":null,"ObservateurAdjoint1":null,"ObservateurAdjoint2":null}]"


alors qu'avec ceci :

texte = '[{"date":"2008-09-28","Stade":null,"Terrain":null,"Lieu":"AVENUE DE PARIS","Ville":"79260 LA CRECHE","SaisieDistance":"13","equipelocalesaisie":"La Cr\u00e8che 2","equipevisiteusesaisie":"St Maxire AV S 2","competition":"4\u00c8ME DIVISION","choix_journee":"","choix_poste":"Arbitre centre","NomArbitre":null,"NomAssistant1":null,"NomAssistant2":null,"ArbitreRemplacant":null,"NomDeleguePrincipal":null,"NomDelegueAjoint":null,"NomDelegueAccompagnateur":null,"ObservateurPrincipal":null,"ObservateurAdjoint1":null,"ObservateurAdjoint2":null}]';
			
myJsonObj = JSON.parse(texte);
        
alert(myJsonObj[0].equipelocalesaisie);


Me donne : La Crèche 2 soit ma donnée!

La différence qu'il y a, c'est qu'au début et à la fin de texte, il y a des ' ou lieu des "

Je pense donc que j'ai un problème en amont au niveau de

echo json_encode($ligne);


me donne

[{"date":"2008-09-28","Stade":null,"Terrain":null,"Lieu":"AVENUE DE PARIS","Ville":"79260 LA CRECHE","SaisieDistance":"13","equipelocalesaisie":"La Cr\u00e8che 2","equipevisiteusesaisie":"St Maxire AV S 2","competition":"4\u00c8ME DIVISION","choix_journee":"","choix_poste":"Arbitre centre","NomArbitre":null,"NomAssistant1":null,"NomAssistant2":null,"ArbitreRemplacant":null,"NomDeleguePrincipal":null,"NomDelegueAjoint":null,"NomDelegueAccompagnateur":null,"ObservateurPrincipal":null,"ObservateurAdjoint1":null,"ObservateurAdjoint2":null}]

Modifié par ledisciple1 (19 Oct 2013 - 13:33)
Pages :