2013-06-12 6 views
0

У меня есть проблема с моим кодировкой ...кодирование PHP Postgres json_encode

Все UTF-8 настроен, а именно моя база данных (Postgres) и мои файлы PHP.

, когда я выполнить этот сценарий:

$eleves = $serviceManager->getAll('Eleve'); 
echo "<pre>"; 
print_r($eleves); 
echo "</pre>"; 

я получаю это:

[0] => Model_Eleve Object 
    (
     [idEleve:Model_Eleve:private] => 28206 
     [numeroscolaire:Model_Eleve:private] => ABE290999JOËL 
     [nom:Model_Eleve:private] => Abedinpour 
     [prenom:Model_Eleve:private] => Joël 
     [dateNaissance:Model_Eleve:private] => 1999-09-29 
     [sexe:Model_Eleve:private] => masculin 
     [statusCourant:Model_Eleve:private] => 
     [statusSuivant:Model_Eleve:private] => 
     [adresses:Model_Eleve:private] => Array 
      (
       [0] => Model_Adresse Object 
        (
         [idAdresse:Model_Adresse:private] => 6176 
         [rue:Model_Adresse:private] => La Delèze 
         [numero:Model_Adresse:private] => 37 
         [codePostal:Model_Adresse:private] => 1164 
         [localite:Model_Adresse:private] => Buchillon 
         [emplacement:Model_Adresse:private] => 
        ) 

      ) 

Здесь все в порядке. Но если я хочу JSON:

$eleves = $serviceManager->getAll('Eleve'); 
echo "<pre>"; 
echo json_encode($eleves, JSON_PRETTY_PRINT); 
echo "</pre>"; 

Я получаю это:

{ 
    "nom": "Abedinpour", 
    "prenom": "Jo\u00ebl", 
    "adresse": [ 
     { 
      "rue": "La Del\u00e8ze", 
      "numero": "37", 
      "localite": "Buchillon" 
     } 
    ], 
    "classe": [ 
     "7VSG\/1" 
    ] 
}, 

Я понятия не имею, почему он работает с массивом и не работает с json_encode ... Я пытался превратить все в utf8 (с htmlentities), но он говорит мне, что он не может преобразовать «ASCII»

Когда я пытаюсь показать кодировку моих файлов с этой командой в терминале:

file -I myfile.php 

возвращает это:

myfile.php: text/x-php; charset=us-ascii 

, но я не могу преобразовать его в utf8:

iconv -f us-ascii -t utf-8 myfile.php > myfile2.php 
file -I myfile2.php 
myfile2.php: text/x-php; charset=us-ascii 

заранее спасибо за вашу помощь

ответ

2

То есть в совершенно правильный путь в формате JSON для кодирования не-ASCII-символы. Здесь нет ничего плохого. Любой клиент, правильно декодирующий это, получит правильный символ. Если вы предпочитаете действительные символы UTF-8 и используете PHP 5.4+, используйте флаг JSON_UNESCAPED_UNICODE для json_encode.

+0

Да, он отлично работает! но возможно ли иметь JSON_UNESCAPED_UNICODE и JSON_PRETTY_PRINT? Я пробовал это: $ eleves2 = json_encode ($ eleves, JSON_UNESCAPED_UNICODE); $ eleves3 = json_encode ($ eleves2, JSON_PRETTY_PRINT); , но это не сработает ... – theplayer777

+0

Параметр представляет собой бит-флаг, чтобы передать два * OR * them: 'JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT'. – deceze

+0

Oups Я только что нашел: json_encode ($ eleves, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); Спасибо за вашу помощь! – theplayer777