У меня довольно сложный, хотя и не очень большой, массив с множеством уровней вложенности.Массив содержит значения, закодированные в ISO-8895, а также объекты с той же проблемой.Если я просто
json_encode($array)
PHP закодирую все значения, содержащиеся в символах ISO-8895, как null
.
Глядя на документацию PHP, мне удалось написать рабочее решение:1007 *
function fixMultibyteSerializedObject($match)
{
return 's:' . mb_strlen($match[2]);
}
/**
* Useful to json-encode arrays of objects with ISO-8895 encoded values.
* Does not work with iso-encoded keys
* @param var $object array or object to be encoded
* @param int $options json_encode options
*/
function isoJsonEncode($object, $options = null)
{
$str = serialize($object);
$str = mb_convert_encoding($str, 'utf-8');
$str = preg_replace_callback(
'!(?<=^|;)s:(\d+)(?=:"(.*?)";(?:}|a:|s:|b:|d:|i:|o:|N;))!s',
'fixMultibyteSerializedObject',
$str);
$object = unserialize($str);
return json_encode($object, $options);
}
Помимо получения лучшей библиотеки, такой как компонент кодирования Zend json, можете ли вы предложить лучшее решение?
Спасибо, Iacopo