본문 바로가기
프로그래밍 언어/Etc

[php] json_encode() 함수 사용시 한글 깨지는 문제 해결방법 (PHP Warning: json_encode(): Invalid UTF-8 sequence in argument in )

by 우림 2017. 1. 15.

특정 폴더에 있는 파일들을 불러와서 화면에 출력하기 위해 json_encode() 함수를 사용했습니다.




이렇게 files 폴더 아래에 4개의 파일들이 있고, 이 4개의 파일을 화면에 보여주고 싶은데...





이렇게 한글명이 들어가 있는 파일은 (null)이라고 찍힙니다.

순간 당황했는데 인터넷을 뒤져서 찾았습니다.



출처 : http://bloodguy.tistory.com/entry/PHP-jsonencode-%ED%95%A0-%EB%95%8C-Invalid-UTF8-sequence-in-argument-warning




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class MoaJson
{
    private static $detect_order = 'UTF-8,EUC-KR';
 
    public static function encode($data, $detect_order=null)
    {
        if ($detect_order === null) $detect_order = self::$detect_order;
 
        return json_encode(self::convertEncoding($data, $detect_order));
    }
 
    private static function convertEncoding($data, $detect_order)
    {
        if (is_array($data)) {
            foreach ($data as $k=>$v) {
                $data[$k] = self::convertEncoding($v, $detect_order);
            }
        }
        else if (is_string($data)) {
            $detected = mb_detect_encoding($data, $detect_order);
            if ($detected != 'UTF-8') $data = iconv($detected, 'UTF-8', $data);
        }
 
        return $data;
    }
}
cs



이렇게 MoaJson.class라는 파일을 하나 만들었구요.



1
2
3
include_once ( '/classes/MoaJson.class.php' );
$moaJson = new MoaJson();
$jsonString = $moaJson::encode( $jsonArray );
cs



이렇게 사용하니까 잘 되네요^^






댓글