json_encode数组,带有iso-8895字符

时间:2011-07-26 12:33:02

标签: php json encoding

我有一个非常复杂的,即使不是很大的数组,有很多级别的嵌套。 该数组包含以ISO-8895编码的值,以及具有相同问题的对象。 如果我只是

 json_encode($array)

PHP会将ISO-8895字符的所有值静默编码为null

查看PHP文档,我设法编写了一个可行的解决方案:

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

1 个答案:

答案 0 :(得分:2)

这样的事情怎么样?

array_walk_recursive($array, function (&$elem) {
    if (is_string($elem)) {
        $elem = iconv('ISO-8895', 'UTF-8', $elem);
    }
});

echo json_encode($array);