Меню Закрыть

Php json encode json unescaped unicode

Содержание

(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)

json_encode — Возвращает JSON-представление данных

Описание

Возвращает строку, содержащую JSON-представление value .

Список параметров

value — значение, которое будет закодировано. Может быть любого типа за исключением resource .

Все строковые данные должны быть в кодировке UTF-8.

PHP реализует надмножество JSON, который описан в первоначальном » RFC 4627, — также кодируя и декодируя скалярные типы и NULL . RFC 4627 поддерживает эти значения только в случае, если они находятся внутри массива или объекта.

И хотя это надмножество согласуется с расширенным определением "JSON текста" из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.

Битовая маска составляемая из значений JSON_HEX_QUOT , JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_NUMERIC_CHECK , JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , JSON_FORCE_OBJECT , JSON_UNESCAPED_UNICODE . Смысл этих констант объясняется на странице JSON констант.

Задает максимальную глубину. Должен быть больше нуля.

Возвращаемые значения

Возвращает JSON закодированную строку ( string ) в случае успеха или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.5.0 Добавлен параметр depth .
5.4.0 В options были добавлены константы JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , и JSON_UNESCAPED_UNICODE .
5.3.3 Константа JSON_NUMERIC_CHECK была добавлена в option .
5.3.0 Был добавлен параметр options .

Примеры

Пример #1 Пример использования json_encode()

= array( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 , ‘e’ => 5 );

echo json_encode ( $arr );
?>

Результат выполнения данного примера:

Пример #2 Пример использования json_encode() , показывающий действия некоторых его опций

echo "Обычно: " , json_encode ( $a ), "
" ;
echo "Тэги: " , json_encode ( $a , JSON_HEX_TAG ), "
" ;
echo "Апострофы: " , json_encode ( $a , JSON_HEX_APOS ), "
" ;
echo "Кавычки: " , json_encode ( $a , JSON_HEX_QUOT ), "
" ;
echo "Амперсанды: " , json_encode ( $a , JSON_HEX_AMP ), "
" ;
echo "Юникод: " , json_encode ( $a , JSON_UNESCAPED_UNICODE ), "
" ;
echo "Все: " , json_encode ( $a , JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ), "

Читайте также:  Интернет банк россельхозбанка войти

" ;

echo "Отображение пустого массива как массива: " , json_encode ( $b ), "
" ;
echo "Отображение пустого массива как объекта: " , json_encode ( $b , JSON_FORCE_OBJECT ), "

" ;

$c = array(array( 1 , 2 , 3 ));

echo "Отображение неассоциативного массива как массива: " , json_encode ( $c ), "
" ;
echo "Отображение неассоциативного массива как объекта: " , json_encode ( $c , JSON_FORCE_OBJECT ), "

" ;

$d = array( ‘foo’ => ‘bar’ , ‘baz’ => ‘long’ );

echo "Ассоциативный массив всегда отображается как объект: " , json_encode ( $d ), "
" ;
echo "Ассоциативный массив всегда отображается как объект: " , json_encode ( $d , JSON_FORCE_OBJECT ), "

" ;
?>

Результат выполнения данного примера:

Пример #3 Пример с последовательными индексами начинающимися с нуля и непоследовательными индексами массивов

echo "Последовательный массив" . PHP_EOL ;
$sequential = array( "foo" , "bar" , "baz" , "blong" );
var_dump (
$sequential ,
json_encode ( $sequential )
);

echo PHP_EOL . "Непоследовательный массив" . PHP_EOL ;
$nonsequential = array( 1 => "foo" , 2 => "bar" , 3 => "baz" , 4 => "blong" );
var_dump (
$nonsequential ,
json_encode ( $nonsequential )
);

echo PHP_EOL . "Последовательный массив с одним удаленным индексом" . PHP_EOL ;
unset( $sequential [ 1 ]);
var_dump (
$sequential ,
json_encode ( $sequential )
);
?>

Результат выполнения данного примера:

Примечания

В случае ошибки кодирования, можно использовать json_last_error() для определения точной ошибки.

При кодировании массива в случае, если его индексы не являются последовательными числами от нуля, то все индексы кодируются в строковые ключи для каждой пары индекс-значение.

Как и эталонный кодировщик JSON, json_encode() будет создавать JSON в виде простого значения (т.е. не объект и не массив), если ему переданы string , integer , float или boolean в качестве входящего значения value . Большинство декодеров воспринимают эти значения как правильный JSON, но некоторые нет, потому что спецификация неоднозначна на этот счет.

Читайте также:  Программы для написания кода javascript

Всегда проверяйте, что ваш JSON декодер может правильно обрабатывать данные, которые вы создаете с помощью json_encode() .

Смотрите также

  • JsonSerializable
  • json_decode() — Декодирует JSON строку
  • json_last_error() — Возвращает последнюю ошибку
  • serialize() — Генерирует пригодное для хранения представление переменной

I’m selecting some data from database and encoding them as json, but I’ve got a problem with czech signs like

My file is in utf-8 encoding, my database is also in utf-8 encoding, I’ve set header to utf-8 encoding as well. What else should I do please?

and part of the printed json: "package":"zv. tkanalouce"

EDIT: Without mb_convert_encoding() function the printed string is empty and "error" is printed.

1 Answer 1

With the code you’ve got in your example, the output is:

You see the question marks in there because they have been introduced by mb_convert_encoding . This happens when you use encoding detection (" auto " as third parameter) and that encoding detection is not able to handle a character in the input, replacing it with a question mark. Exemplary line of code:

This also means that the data coming out of your database is not UTF-8 encoded because mb_convert_encoding($buffer, ‘UTF-8’, ‘auto’); does not introduce question marks if $buffer is UTF-8 encoded.

Therefore you need to find out which charset is used in your database connection because the database driver will convert strings into the encoding of the connection.

Most easy is that you just tell per that database link that you’re asking for UTF-8 strings and then just use them:

Итак, проблема такова: имеется простейший массив

в переменной $jsonString будет лежать строка

Читайте также:  Беспроводные наушники sony с активным шумоподавлением

В версии PHP 5.4 добавили опцию JSON_UNESCAPED_UNICODE, которая решит проблему, но ждать пока хостинг-компании обновятся до версии 5.4 времени нету, поэтому проблему нужно решить подручными способами.

Решение грубое, но на войне все средства хороши:

$arrayUtf = array(‘u0410’, ‘u0430’, ‘u0411’, ‘u0431’, ‘u0412’, ‘u0432’, ‘u0413’, ‘u0433’, ‘u0414’, ‘u0434’, ‘u0415’, ‘u0435’, ‘u0401’, ‘u0451’, ‘u0416’, ‘u0436’, ‘u0417’, ‘u0437’, ‘u0418’, ‘u0438’, ‘u0419’, ‘u0439’, ‘u041a’, ‘u043a’, ‘u041b’, ‘u043b’, ‘u041c’, ‘u043c’, ‘u041d’, ‘u043d’, ‘u041e’, ‘u043e’, ‘u041f’, ‘u043f’, ‘u0420’, ‘u0440’, ‘u0421’, ‘u0441’, ‘u0422’, ‘u0442’, ‘u0423’, ‘u0443’, ‘u0424’, ‘u0444’, ‘u0425’, ‘u0445’, ‘u0426’, ‘u0446’, ‘u0427’, ‘u0447’, ‘u0428’, ‘u0448’, ‘u0429’, ‘u0449’, ‘u042a’, ‘u044a’, ‘u042b’, ‘u044b’, ‘u042c’, ‘u044c’, ‘u042d’, ‘u044d’, ‘u042e’, ‘u044e’, ‘u042f’, ‘u044f’);

$arrayCyr = array(‘А’, ‘а’, ‘Б’, ‘б’, ‘В’, ‘в’, ‘Г’, ‘г’, ‘Д’, ‘д’, ‘Е’, ‘е’, ‘Ё’, ‘ё’, ‘Ж’, ‘ж’, ‘З’, ‘з’, ‘И’, ‘и’, ‘Й’, ‘й’, ‘К’, ‘к’, ‘Л’, ‘л’, ‘М’, ‘м’, ‘Н’, ‘н’, ‘О’, ‘о’, ‘П’, ‘п’, ‘Р’, ‘р’, ‘С’, ‘с’, ‘Т’, ‘т’, ‘У’, ‘у’, ‘Ф’, ‘ф’, ‘Х’, ‘х’, ‘Ц’, ‘ц’, ‘Ч’, ‘ч’, ‘Ш’, ‘ш’, ‘Щ’, ‘щ’, ‘Ъ’, ‘ъ’, ‘Ы’, ‘ы’, ‘Ь’, ‘ь’, ‘Э’, ‘э’, ‘Ю’, ‘ю’, ‘Я’, ‘я’);

Вот и все. Теперь $jsonString хранит нужную нам строку

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.