2013-09-03 5 views
0

У меня есть файл CSV, который выглядит следующим образом:PHP json_encode присваивает значение null вместо значения?

http://ideone.com/YWuuWx

Я прочитал файл и преобразовать его в массив, который работает полностью нормально, но потом я jsonize массива - но json_encode оленьей кожи положить реальный ценности - это ставит нуль - вот дамп массива и jsonized массива:

http://jave.jecool.net/stackoverflowdemos/csv_to_json_to_arraydump.php

преобразовать так: $php_array= json_encode($json_array,JSON_PRETTY_PRINT);

Кто-нибудь знает, что может вызвать проблему?

EDIT: Я думаю, что это похоже на 90% шанс, что его вызванные латинскими персонажами - кто-нибудь знает лучшее обходное решение?

+0

не очень, то эти символы будут закодированный тоже в вашем случае это будет ' D \ u0159evo' – slash197

+0

Ну, этого как-то не бывает - см. Этот https://bugs.php.net/bug.php?id=49588 у кого-то уже была эта проблема, однако htmlentities не помогает моей проблеме, она возвращает возвратную пустую строку x) –

+1

Вы действительно проверили с помощью json_last_error() e, если это ошибка кодирования? – TML

ответ

2

Предполагая, что это фактически ошибка кодирования, и что ваши данные фактически закодированы в некоторых вариантах ISO-8859 (я предполагаю, что latin2 вместо latin1 основан на использовании LATIN SMALL LETTER R WITH CARON) и что это пОСЛЕДОВАТЕЛЬНО так, вы можете использовать Iconv(), чтобы перекодировать его в UTF-8, прежде чем делать json_encode():

$foo = iconv('ISO-8859-2', 'utf8', $foo); 
+0

У вас есть опечатка - кодировка ** utf-8 ** :)! Но с ** utf-8 ** он работает! :) (Извините за Latin1, это латынь2, которая тоже была многодисковой: D) спасибо! :) (пожалуйста, исправьте, и я соглашусь :)) –

+0

Я не понимаю ваш последующий вопрос (и что он должен делать с принятием ответа на вопрос здесь). Кроме того, «utf-8» и «utf8» полностью основаны на вашей собственной конфигурации iconv - то, что работает в вашей системе, дало бы неверную ошибку кодирования на моем :) – TML

+0

well http://tools.ietf.org/html/rfc3629 standard указывает его на дефис :) - в этом выпуске лучше остановиться со стандартами и настройками по умолчанию :) - И следующий вопрос - обратное преобразование - это iconv ('utf8', 'ISO-8859 -2 ', $ foo) ?, потому что iconv (' ISO-8859-2 ',' utf8 ', $ foo) хорош для json => отображение javascript, но неправильно для php echo :) –

Смежные вопросы