支持gbk/gb2312/gb18030的PHP json扩展
网站使用的是gbk编码,但是有些地方又使用了json来交换数据,现在发现使用PHP写的代码效率都不高,所以就想到了使用PHP ext来实现一下。
因为重新实现实在是太复杂了,于是取巧,修改了下PHP代码中的json扩展,修改后的代码已经放到 googlecode 上了:
http://code.google.com/p/gxcode/source/browse/#svn/trunk/json
具体的实现方式如下:
主要添加了json_internal_encoding(string encoding) 函数,设定json_encode的输入和json_decode的输出编码。
之后hack了json_encode/json_decode的输入以及输出,如果不设定编码则默认采用原扩展的方法,否则采用 iconv 来转换编码。
使用方式:
<?php
json_internal_encoding("GBK");
echo "Test json_encode:\n";
$from = array("您好世界");
echo " from : ", var_export($from) , "\n";
echo " result: ", json_encode($from), "\n";
echo "Test json_decode:\n";
$to = json_encode($from);
echo " from: ", $to, "\n";
echo " result: ", var_export(json_decode($to)),"\n";
输入结果如下:
Test json_encode:
from : array (
0 => '您好世界',
)
result: ["\u60a8\u597d\u4e16\u754c"]
Test json_decode:
from: ["\u60a8\u597d\u4e16\u754c"]
result: array (
0 => '您好世界',
)
如果你也有同样的问题,不妨试试看,如果有问题,可以留言告诉我。