支持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 => '您好世界',
)
 

如果你也有同样的问题,不妨试试看,如果有问题,可以留言告诉我。

This article is posted by on , link is .

Leave a reply

  • says:
    感谢提供。目前暂时使用php的iconv,如果量大了,就考虑使用你提供的ext:)