php中json_encode要求文件以utf-8编码
巴扎黑
巴扎黑 2017-04-11 09:09:47
[PHP讨论组]



这是$.ajax传给php的json串

  [
        {
            "user": {
                "user1": "user1"
            },
            "tab": {
                "表名": "表名"
            },
            "col": {
                "列名": "列名"
            },
            "isdmptab": "0",
            "lderrset": "stopld"
        },
        {
            "user": {
                "user1": "user1"
            },
            "tab": {
                "表名": "表名"
            },
            "col": {
                "列名": "列名"
            },
            "isdmptab": "0",
            "lderrset": "stopld"
        },
        {
            "user": {
                "user1": "user1"
            },
            "tab": {
                "表名": "表名"
            },
            "col": {
                "列名": "列名"
            },
            "isdmptab": "0",
            "lderrset": "stopld"
        },
        {
            "user": {
                "user1": "user1"
            },
            "tab": {
                "表名": "表名"
            },
            "col": {
                "列名": "列名"
            },
            "isdmptab": "0",
            "lderrset": "stopld"
        },
        {
            "user": {
                "user2": "user2"
            },
            "tab": {
                "表名": "表名"
            },
            "col": {
                "列名": "列名"
            },
            "isdmptab": "0",
            "lderrset": "stopld"
        }
    ]


这是php部分$_POST['tabmap']的输出
中文部分 结果不对

Array
(
    [0] => Array
        (
            [user] => Array
                (
                    [user1] => user1
                )

            [tab] => Array
                (
                    [0] => 表名
                )

            [col] => Array
                (
                    [0] => 列名
                )

            [isdmptab] => 0
            [lderrset] => stopld
        )

    [1] => Array
        (
            [user] => Array
                (
                    [user1] => user1
                )

            [tab] => Array
                (
                    [0] => 表名
                )

            [col] => Array
                (
                    [0] => 列名
                )

            [isdmptab] => 0
            [lderrset] => stopld
        )

    [2] => Array
        (
            [user] => Array
                (
                    [user1] => user1
                )

            [tab] => Array
                (
                    [0] => 表名
                )

            [col] => Array
                (
                    [0] => 列名
                )

            [isdmptab] => 0
            [lderrset] => stopld
        )

    [3] => Array
        (
            [user] => Array
                (
                    [user1] => user1
                )

            [tab] => Array
                (
                    [0] => 表名
                )

            [col] => Array
                (
                    [0] => 列名
                )

            [isdmptab] => 0
            [lderrset] => stopld
        )

    [4] => Array
        (
            [user] => Array
                (
                    [user2] => user2
                )

            [tab] => Array
                (
                    [0] => 表名
                )

            [col] => Array
                (
                    [0] => 列名
                )

            [isdmptab] => 0
            [lderrset] => stopld
        )

)

巴扎黑
巴扎黑

全部回复(7)
高洛峰

json_decode只支持utf-8,看看你的代码文件的编码是否正确。

黄舟

可以的啊!测试code如下:

$tmp = '{
        "user": {
            "user1": "user1"
        },
        "tab": {
            "表名": "表名"
        },
        "col": {
            "列名": "列名"
        },
        "isdmptab": "0",
        "lderrset": "stopld"
}';

print_r(json_decode($tmp, true));

结果如图

巴扎黑

必须支持,但是PHP获取到的json如果想转换成数组必须json_decode($tmp, true),注意第二个参数是true,不然转换成的就是object,是对象。

巴扎黑

楼主,这样看来明显是你的运行环境有问题,看看我的运行结果
https://www.bytelang.com/o/s/...

ringa_lee

楼上+1,代码没问题,题主输出其他内容试试

echo 'superman'
巴扎黑

5.4也是没问题的,猜测编码问题,json_decode只支持utf-8编码,用iconv或mb_convert_encoding转换下

PHPz

json_decode函数只能解码UTF-8编码的字符串,官方文档中这样描述的:

json
    The json string being decoded.

    This function only works with UTF-8 encoded strings.

在遇到json_encode后无法获取结果的情况时,使用json_last_error函数可以输出出错的原因:

switch (json_last_error()) {
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
        echo ' - Unknown error';
    break;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号