V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
darasion
V2EX  ›  问与答

怎样让 php 的 json_encode() 兼容任何编码?

  •  
  •   darasion · 2011-07-09 14:32:58 +08:00 · 4272 次点击
    这是一个创建于 4672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情是这样的

    json_encode() 只支持兼容utf-8编码的东西。如果不是就会报错500.。

    要编成 json 传输到浏览器端,输入数据的编码可能是随机的任何编码,要让这些内容正常显示。
    8 条回复    1970-01-01 08:00:00 +08:00
    TheOnly92
        1
    TheOnly92  
       2011-07-09 14:43:20 +08:00
    mb_convert_encoding($input, 'UTF-8')
    darasion
        2
    darasion  
    OP
       2011-07-09 14:44:32 +08:00
    @TheOnly92 这个函数试过,但是它却把正常能显示的东西编码成什么都看不清的乱码了。。。
    TheOnly92
        3
    TheOnly92  
       2011-07-09 14:47:26 +08:00
    你应该至少控制一下输入数据的编码,在 <head> 内加 <meta charset> 输入进来的就都是 UTF-8 了,还是说这些数据是前人留下来的?
    darasion
        4
    darasion  
    OP
       2011-07-09 15:01:14 +08:00
    @TheOnly92 呵呵,需求特殊,这个是从海量文件里 cat 出来的内容,事先不可能知道是什么编码。也许编码根本不符合规则。要做个很智能,很兼容的东西出来..
    TheOnly92
        5
    TheOnly92  
       2011-07-09 15:23:17 +08:00
    如果要编成 json 的数据不是很复杂,就用 $out = '["' . implode('","', $return_arr) . '"]'; 这样简单的就行了吧。否则就得想办法把所有数据转变为 UTF-8
    darasion
        6
    darasion  
    OP
       2011-07-09 15:51:46 +08:00
    @TheOnly92 ...很不幸,两个条件都无法满足。

    一、很复杂;
    二、没办法都变utf8。

    算了,这个问题我还是搁置吧....
    darasion
        7
    darasion  
    OP
       2011-07-09 16:12:04 +08:00
    我换个角度来问:

    mb_detect_encoding($str, array('gbk','utf-8',..........)) 这个函数,以什么样的判断顺序为佳?

    有种如果 我把 utf-8放在 gbk的前边,那么很多时候gbk会被判断成utf-8, 最终给json_encode编码还是会出错。 如果我把gbk放在前边,那么会不会utf-8被判断成gbk?

    怎样的顺序才能兼容所有编码?
    TheOnly92
        8
    TheOnly92  
       2011-07-09 16:18:32 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1396 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:33 · PVG 01:33 · LAX 10:33 · JFK 13:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.