Encodage json

Mammouth du PHP | 725 Messages

22 févr. 2012, 05:10

Bonjour

Je fais une transmission de donnees via PHP/json, les lettres latines (a, b, c,...) se passent via json mais les autres caracteres me donnent un vide, cas des caracteres arabes:


verif.php:

<?php

$return_arr = array();

$pseudo = $_POST['username'];


// traitement de donnees


			
			$welcome = '<hr>';
			$welcome .= 'Bienvenue';
			$welcome .= ' '.$pseudo;

$return_arr["welcome"] = $welcome;

echo json_encode($return_arr);

?>

si le pseudo est en lettres latines ca marche, sinon il affiche Bienvenue et c'est tou

index.php:
$.ajax({
        type: "POST",
        url: "verif.php",
        data: dataString,
        dataType: "json",
        success: function(data) {
             
			 if(data.loginError == 0)
             {
             	$('.loginForm').fadeOut(3000);
             	$('span.showForm').fadeIn(3000).html(data.welcome);
             	
             	// resultat: Bienvenue (vide) en cas d'un utilisateur avec des caractes arabes
             	
             }
j'ai meme essaye l'encodage utf8 mais ca marche toujours pas

merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2012, 09:53

problème de charset ?

a tu essayé de ne passer que les données et ajouter la mise en forme en JS (ce n'est qu'une concaténation).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 209 Messages

22 févr. 2012, 11:28

Salut,
Cette fonction ne fonctionne qu'avec des données encodées UTF-8.
Comment as-tu essayé l'encodage UTF-8 ?
$return_arr["welcome"] = utf8_encode($welcome);
N'oublies pas de définir tes encodages (header php, meta, fichier php).

++

Mammouth du PHP | 725 Messages

22 févr. 2012, 14:22

si j'ajoute:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
il n'affiche rien parce que c'est du json

Eléphant du PHP | 209 Messages

22 févr. 2012, 14:44

Le type text/json existe mais il faut le mettre au niveau du php.

Tu peux garder ta balise meta pour ta page HTML.

ViPHP
AB
ViPHP | 5818 Messages

23 févr. 2012, 01:17

<?php
header('Content-type: text/html; charset=UTF-8');
A mettre en haut de page car il est très possible que l'entête apache soit toujours par défaut en iso et cette entête prime toujours sur celle que vous avez déclaré dans le meta html (excepté si vous pouvez configurer le serveur avec : AddDefaultCharset Off)

Pour plus d'info cf ce tuto

Mammouth du PHP | 725 Messages

24 févr. 2012, 05:19

je vais essayer avec le header