首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在json_encode()

在json_encode()
EN

Stack Overflow用户
提问于 2011-04-25 22:24:33
回答 4查看 2.9K关注 0票数 2

如果字符串中包含çøas或其他特殊字符,怎么会返回为null呢?不仅保留特殊字符,而且将整个字符串(值)作为null返回...

编辑:

代码语言:javascript
复制
class JSON {
    static function encode($arr, $utf8_encode=false){
        $arr = self::parse_int($arr);

        if($utf8_encode){
            array_walk_recursive($arr, array(self => 'utf8_enc'));
        }

        return $arr ? json_encode($arr):'{}';
    }

    static function decode($str){
        return json_decode($str, true);
    }

    function utf8_enc(&$value, $key){
        $value = utf8_encode($value);
    }

    function parse_int($arr){
        foreach($arr as $key => $value){
            if(is_array($value)){
                $arr[$key] = self::parse_int($value);
            }
            else{
                if(is_numeric($value)){
                    settype($value, 'float');
                }

                $arr[$key] = $value;
            }
        }

        return $arr;
    }
}

但是我得到了这个错误:

代码语言:javascript
复制
Warning: array_walk_recursive() expects parameter 2 to be a valid callback, array must have exactly two members

在这一行中:

代码语言:javascript
复制
array_walk_recursive($arr, array(self => 'utf8_enc'));

如何在当前对象中定义函数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-25 22:28:46

所有发送到json_encode函数的字符串都应该是UTF8编码的。没有例外。您可以使用iconv或utf8_encode来帮助您。

票数 3
EN

Stack Overflow用户

发布于 2011-04-25 22:25:59

json_encode requires输入的字符串是用UTF-8编码的。如果调用它并以任何单字节编码传递此类字符,则返回值为null

票数 2
EN

Stack Overflow用户

发布于 2011-04-25 23:02:50

嗯,我上了你的课,改进了一点。没有理由将内部类方法声明为静态方法。您的encode和decode方法可以是静态的,但parse_int和utf8_enc可以是简单的私有方法。

代码语言:javascript
复制
<?php

class JSON {
    public function encode($arr, $utf8_encode = false) {
        $arr = $this->parse_int($arr);

        if ($utf8_encode) {
            array_walk_recursive($arr, array($this, 'utf8_enc'));
        }

        return $arr ? json_encode($arr) : '{}';
    }

    public function decode($str) {
        return json_decode($str, true);
    }

    private function utf8_enc(&$value, $key) {
        $value = utf8_encode($value);
    }

    private function parse_int($arr)
    {
        foreach ($arr as $key => $value) {
            if (is_array($value)) {
                $arr[$key] = $this->parse_int($value);
            } else {
                if (is_numeric($value)) {
                    settype($value, 'float');
                }
                $arr[$key] = $value;
            }
        }

        return $arr;
    }
}

$json = new JSON;
echo $json->encode(array('áé$@(*&dásásd?eq'), true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5779309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档