json_decode не работает без utf8_encode

Я получаю utf8-json-String из java в качестве переменной сообщения в свой php-файл.

мой заголовок php установлен как charset = utf-8, html charset = utf-8, а файл php - utf8 без спецификации.

Я пытаюсь записать данные json в базу данных TSQL.

If I do

$jsonfile = $_POST['jsonfile'];
$jsonfile = utf8_decode($jsonfile); 
$jsonarray = json_decode($jsonfile);
foreach($jsonarray as $value)   {
// write in database
}

все данные записываются в мою базу данных. К сожалению, кодировка удаляет немецкие символы, такие как ß().

если я сделаю только

$jsonfile = $_POST['jsonfile'];
$jsonarray = json_decode($jsonfile);
foreach($jsonarray as $value)   {
// write in database
}

php не проходит через массив.


person alex    schedule 09.10.2013    source источник
comment
Вы также установили правильную кодировку для полей БД?   -  person Ella Ryan    schedule 09.10.2013
comment
Если я скопирую и вставлю строку json в файл php и сошлюсь на нее в $jsonfile, json_decode без utf8_decode будет работать хорошо. Все записывается в базу. Поэтому я спрашиваю, связано ли это с кодировкой БД   -  person alex    schedule 09.10.2013


Ответы (1)


(Я предполагаю, что вы также пишете клиент Java.)

Отправьте запрос POST как Content-type: application/json и JSON в качестве полезной нагрузки запроса, а не отправляйте его как application/x-www-form-urlencoded с куском JSON в поле формы.

Вы можете прочитать полное содержимое полезной нагрузки в PHP с помощью file_get_contents("php://input").

person Pj Dietz    schedule 09.10.2013
comment
Нет, JSON исходит из другого источника. Я могу просмотреть строку JSON, как она появляется. Если я скопирую и вставлю его в код, он сработает, поэтому, возможно, мне придется фильтровать специальные символы. - person alex; 10.10.2013