json_encode works with UTF-8 encoded strings only. If you need to create valid json successfully from an Chinese encoded string, you need to re-encode/convert it to UTF-8 first. Then json_encode will just work as documented.
Use iconv
for converting encoding, you can also use mb_convert_encoding
$str = iconv("GB2312", "UTF-8", $str);