PHP JSON ET UTF8

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP JSON ET UTF8

Re: PHP JSON ET UTF8

par mctarek » 30 mai 2011, 20:00

Est-ce qu'une fonction comme array_map() ou array_walk() pourrait faire ton bonheur ? :)
Un grand merci pour l'idée de la fonction array_map dont voici la solution adaptée :
function utf8($n) {
	return (utf8_encode($n));
	}

// appel à la BDD

	while ($row = mysql_fetch_assoc($query)) {
		$ligne[]=array_map("utf8",$row); //traîtement utf8 appliquée à chaque ligne
		}
		$json = json_encode($ligne);
	}

$json = json_encode($ligne);
echo $json;
Et tout va bien sur l'affichage de la chaîne JSON. Clos.
mctarek

Re: PHP JSON ET UTF8

par mctarek » 30 mai 2011, 12:23

Est-ce qu'une fonction comme array_map() ou array_walk() pourrait faire ton bonheur ? :)
Gloups :roll: Je retourne à la case étude nouvelles fonctions. A bientôt pour la fermeture de ce post.
mctarek

Re: PHP JSON ET UTF8

par Ryle » 29 mai 2011, 22:10

Est-ce qu'une fonction comme array_map() ou array_walk() pourrait faire ton bonheur ? :)

PHP JSON ET UTF8

par mctarek » 29 mai 2011, 20:53

Non, ce n'est pas le bon, la brut et le truand mais bien un problème que je rencontre...
J'ai posté récemment un message sur le forum intitulé "Réponse multiple avec JSON"
et j'ai obtenu une réponse rapide. Parfait.
La solution consistait à parcourir toutes les lignes de la BDD puis encoder le tout
soit par exemple :
	while ($row = mysql_fetch_assoc($query)) {
		$ligne[]=$row;
		}	
		$json = json_encode($ligne);
Mais rapidement, je suis tombé sur un os. La chaine JSON renvoit null sur certaines données.
Je suis tombé alors sur ce message http://www.commentcamarche.net/forum/af ... -accentues
qui résume bien la problématique. Problème si caractères accentués. J'ai tenté alors de convertir une colonne de ma table Mysql en utf8 mais sans résultat.
La fonction utf8_encode() prend en paramètre une chaîne or dans le code ci-haut, toutes les variables sont des tableaux.

J'ai réussi par la ritournelle :
while ($row = mysql_fetch_assoc($query)) {
		// $ligne[]=$row;
		$ligne['id']=$row['id'];
		$ligne['NOM']=$row['NOM'];
$ligne['NOTE']=utf8_encode($row['NOTE']); // Lu enfin par Json}
$json = json_encode($ligne);
Vous me direz alors, mais c'est quoi ton problème ?
Ben, c'est que je dois lister pas mal de nom de colonnes pour contourner ce problème.
Avez vous une solution plus astucieuse ?