如何在json_encode中存储日文字符?

时间:2014-04-03 09:27:59

标签: sql utf-8 json

我试图将json_encoded字符串保存到数据库,但无论何时我都能得到这个:

u30abu30bf
保存时

カタ

我如何解码这样的事情?

尝试了php utf8_decode和编码,但我似乎没有工作, 我也试过阅读下面的主题:

  1. PHP decoding and encoding json with unicode characters

  2. difficulty passing Japanese characters(UTF-8) via json_encode

  3. 这是$ flex_encoded的var_dump数据,然后将其作为参数传递:

    //this one seems to passing the right encoding
    [{"japanese_name":"\u30ca\u30ab\u30cd"},{"japanese_name":"\u30ca\u30ab\u30cd"}]
    

    这是函数调用:

    $this->updateFlexData($game_id, $flex_encoded);
    

    这是更新我的数据库的功能:

    function updateFlexData($game_id, $json_data)
    {
        $arrVal = array(
            'json_data'=> $json_data,
        );
    
        Db::getInstance()->autoExecute('japanese_names', $arrVal, 'UPDATE', " game_id = '".$game_id."'", false);
    }
    

    数据库列类型为:

    `json_data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
    

    我的PHP版本:

    PHP Version 5.3.10

2 个答案:

答案 0 :(得分:8)

尝试JSON_UNESCAPED_UNICODE

json_encode($data, JSON_UNESCAPED_UNICODE);

而不是\u7537\u6027\u304c\u5f7c\u5973\u306b\u7740\u3066\...而是男性が彼...

答案 1 :(得分:-1)

经过数小时修补代码后,我以某种方式使其工作: 好吧,它可能不是解决方案但是:

  1. 当我继续使用此内容存储 json_data (下面)从数据库结果解码 json_data 时解析错误,因为额外的“引用< / strong>

    $japanese_name = json_encode($japanese_text); //returns "\u30ca\u30ab\u30cd"
    
  2. 我刚刚删除了“从各方面只是 \ u30ca \ u30ab \ u30cd 然后继续存储在数据库中

    $jp = str_replace("\"","",$japanese_name); //returns \u30ca\u30ab\u30cd