Webservice mysql-xml-json - FF et G-chrome problème accent

Petit nouveau ! | 8 Messages

29 juil. 2010, 04:22

Bonjour,

j'utilise un service web avec une DB en utf-8:
$posts = array();
	if(mysql_num_rows($result)) {
		while($post = mysql_fetch_assoc($result)) {
			$posts[] = array('post'=>array_map('utf8_encode',$post));
		}
	}

	if($format == 'json') {
		header('Content-type: application/json');
		echo json_encode(array('posts'=>$posts));
	}
	else {
		header('Content-type: text/xml');
		echo '<posts>';
		foreach($posts as $index => $post) {
			if(is_array($post)) {
				foreach($post as $key => $value) {
					echo '<',$key,'>';
					if(is_array($value)) {
						foreach($value as $tag => $val) {
							echo '<',$tag,'>',($val),'</',$tag,'>';
						}
					}
					echo '</',$key,'>';
				}
			}
		}
		echo '</posts>';
	}
si je fait : http://localhost/webservice/web-service ... er=1&num=3

j'obtient un xml correct : (avec accent)

Code : Tout sélectionner

<posts> − <post> <post_title>A propos à jour</post_title> <guid>http://localhost/wordpress/?page_id=2</guid> </post> − <post> <post_title>Bonjour tout le monde!</post_title> <guid>http://localhost/wordpress/?p=1</guid> </post> </posts>
Maintenant si je fait : http://localhost/webservice/web-service ... ormat=json

1) dans FF cela fonctionne pas il me demande si je veux télécharger le fichier .php 8-|

2) dans G-chrome il parse mais:

Code : Tout sélectionner

{"posts":[{"post":{"post_title":"A propos \u00e0 jour","guid":"http:\/\/localhost\/wordpress\/?page_id=2"}},{"post":{"post_title":"Bonjour tout le monde!","guid":"http:\/\/localhost\/wordpress\/?p=1"}}]}
"A propos \u00e0 jour" n'est pas correcte devrait être : "A propos à jour"

J'utilise MAMP sous OSX php 5.3

J'ai essayé pas mal de chose avec encode, decode... mais là je suis dans la louse #-o

Merci

Eléphant du PHP | 422 Messages

30 juil. 2010, 09:57

hello

et en ajoutant

header('Content-type: text/html; charset=UTF-8');

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 8 Messages

30 juil. 2010, 21:18

hello

et en ajoutant

header('Content-type: text/html; charset=UTF-8');

++
Merci telnes,

Déjà essayé, Idem !

faudrait changer l'écriture française et supprimer c'est pu... d'accents #-o

ViPHP
ViPHP | 5462 Messages

31 juil. 2010, 20:41

et ton fichier est bien en utf-8 aussi ?

Petit nouveau ! | 8 Messages

31 juil. 2010, 23:03

J'utilise toujours TexMate utf-8 :wink: pour éditer mes fichiers php

ViPHP
ViPHP | 5462 Messages

31 juil. 2010, 23:45

normalement c'est pas grave si tu fais un json_decode derrière les accent reviennent, c'est peu etre une caractéristique du navigateur qui ré encode par dessus, t'as essayé en mettant text/plain au lieu de application/json ?

Petit nouveau ! | 8 Messages

01 août 2010, 01:15

Avec "text/plain" c'est la même chose: pb accent.
Par contre affichage correcte (me demande plus si je veux enregistrer le fichier php...) sous FF

ViPHP
ViPHP | 5462 Messages

01 août 2010, 01:44

Avec "text/plain" c'est la même chose: pb accent.
Par contre affichage correcte (me demande plus si je veux enregistrer le fichier php...) sous FF
c'est normale pour FF , le application/json il reconnais pas, (de toute façon le MIME pour ces trucs la c'est bidon)

par contre pour t'as un utf8_encode ? les donnée de ta base ne son pas en utf-8 ?
verfie aussi le charset sur firefox (clique droit - information sur la page)

je ferais des testes de mon coté,

ps : pourquoi MAMP ? y'a deja un serveur apache - php nativement sous osx.

Petit nouveau ! | 8 Messages

01 août 2010, 01:55

par contre pour t'as un utf8_encode ? les donnée de ta base ne son pas en utf-8 ?
ben en fait si je met pas ça c'est le xml qui part en couille et oui ma base est en utf-8
verfie aussi le charset sur firefox (clique droit - information sur la page)
Bizzard c'est: ISO-8859-1
pourquoi MAMP ? y'a deja un serveur apache - php nativement sous osx.
Question d'habitude... j'évite le camboui :mrgreen:

Petit nouveau ! | 8 Messages

01 août 2010, 02:05

Si j'ecris:

Code : Tout sélectionner

$posts[] = array('post'=>$post);
sortie:

Code : Tout sélectionner

{"posts":[{"post":{"post_title":null,"guid":"http:\/\/localhost\/wordpress\/?page_id=2"}},{"post":{"post_title":"Bonjour tout le monde!","guid":"http:\/\/localhost\/wordpress\/?p=1"}}]}
Si:

Code : Tout sélectionner

$posts[] = array('post'=>array_map('utf8_encode',$post));
sortie:

Code : Tout sélectionner

{"posts":[{"post":{"post_title":"A propos \u00e0 jour","guid":"http:\/\/localhost\/wordpress\/?page_id=2"}},{"post":{"post_title":"Bonjour tout le monde!","guid":"http:\/\/localhost\/wordpress\/?p=1"}}]}
Si:

Code : Tout sélectionner

$posts[] = array('post'=>array_map('utf8_decode',$post));
sortie:

Code : Tout sélectionner

{"posts":[{"post":{"post_title":"A propos ?our","guid":"http:\/\/localhost\/wordpress\/?page_id=2"}},{"post":{"post_title":"Bonjour tout le monde!","guid":"http:\/\/localhost\/wordpress\/?p=1"}}]}
et si je laisse:

Code : Tout sélectionner

$posts[] = array('post'=>$post);
sortie du xml:

Code : Tout sélectionner

Erreur d'analyse XML : mal formé Emplacement : http://localhost/webservice/web-service.php?user=1&num=3 Numéro de ligne 1, Colonne 35 :<posts><post><post_title>A propos � jour</post_title><guid>http://localhost/wordpress/?page_id=2</guid></post><post><post_title>Bonjour tout le monde!</post_title><guid>http://localhost/wordpress/?p=1</guid></post></posts> ----------------------------------^
le script complet pour tester (avec wordpress):
<?php  
header('Content-type: text/html; charset=UTF-8'); 

if(isset($_GET['user']) && intval($_GET['user'])) {

	$number_of_posts = isset($_GET['num']) ? intval($_GET['num']) : 10; 
	$format = strtolower($_GET['format']) == 'json' ? 'json' : 'xml'; 
	$user_id = intval($_GET['user']); 


	$link = mysql_connect('localhost','root','root') or die('erreur connex db');
	mysql_select_db('wordpress',$link) or die('erreur select db);


	$query = "SELECT post_title, guid FROM wp_posts WHERE post_author = $user_id AND post_status = 'publish' ORDER BY ID DESC LIMIT $number_of_posts";
	$result = mysql_query($query,$link) or die('Errant query:  '.$query);

	$posts = array();
	if(mysql_num_rows($result)) {
		while($post = mysql_fetch_assoc($result)) {
			//$posts[] = array('post'=>array_map('utf8_encode',$post));
			$posts[] = array('post'=>$post);
		}
	}

	if($format == 'json') {
		header('Content-type: text/plain');
		echo json_encode(array('posts'=>$posts));
	}
	else {
		header('Content-type: text/xml');
		echo '<posts>';
		foreach($posts as $index => $post) {
			if(is_array($post)) {
				foreach($post as $key => $value) {
					echo '<',$key,'>';
					if(is_array($value)) {
						foreach($value as $tag => $val) {
							echo '<',$tag,'>',($val),'</',$tag,'>';
						}
					}
					echo '</',$key,'>';
				}
			}
		}
		echo '</posts>';
	}
	@mysql_close($link);
}

?>
Modifié en dernier par ilanb le 01 août 2010, 02:10, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

01 août 2010, 02:06

vérifie le adddefaultcharset de ton apache, tu peu regardé aussi du coté de php pour default-charset mais je te le conseil moins

Petit nouveau ! | 8 Messages

01 août 2010, 02:15

Qunénie, j'ai ajouté "AddDefaultCharset utf-8" (par default grisé) dans httpd.conf (redémarrage serveur) même bordel. #-o

mêm chose pour le php.ini, ajouté "default_charset = "utf-8"" :twisted:

ViPHP
ViPHP | 5462 Messages

01 août 2010, 03:42

Qunénie, j'ai ajouté "AddDefaultCharset utf-8" (par default grisé) dans httpd.conf (redémarrage serveur) même bordel. #-o

mêm chose pour le php.ini, ajouté "default_charset = "utf-8"" :twisted:
t'es toujour marqué ISO-8859-1 dans FF même en mettant ca ?

Petit nouveau ! | 8 Messages

01 août 2010, 10:30

Bon après vérification (j'ai plusieurs version de php...), je suis maintenant en UTF-8 quand je fais "information sur la page" mais mes accents sont toujours pas affiché ! :roll: