본문 바로가기
📂 언어/◾ PHP

[PHP] ARRAY 내부 한글 깨짐 에러 해결 방법

by 이 정규 2023. 11. 24.
728x90
반응형

안녕하세요,.. 또 뭐 했다고 11월이 끝나갑니다. 더불어 졸라 춥습니다.

한동안 제게 고통스러운 언어였던 PHP랑은 이제 좀 친구(?)라고 부를만한 정도가 된 것 같습니다. (서당개 3년이면 풍월을 읊는다더니... 3개월 만에 PHP에 눈이 뜨이기 시작하네요...) 오늘 포스팅 하는 글은 MariaDB에서 꺼낸 데이터를 PHP 코드로 Array에 값을 넣어주고 CURL로 API 호출하는 과정에서 자꾸 한글이 깨지는 현상이 있었습니다. 누군가는 쉬이 해결하시길 바라며 글을 써봅니다.

\uC18C\uC7AC \uAD00\uB828 \uCD94\uAC00 \uC815\uBCF4. \uC774 \uC0C1\uD488\uC758 ... uB808\uC774\uD2B8

위와 같이 유니코드로 한글이 바뀌어버리는 이유는 Array가 JSON으로 변환되는 과정에서 생기는 에러입니다. 그렇기 때문에 보내려는 Array를 JSON 형태로 인코딩 해주는 작업이 추가되면 해결할 수 있습니다. 

해결 방법으로는 PHP 버전에 따라 다르다고 하는데, 아마 대부분 5.4 이상을 사용하시고 있을거라 생각됩니다. 그래도 확인을 해보시고 코드를 추가하시는 걸 추천드립니다.

5.4  이상

$array = array( ... );
$encoded_array = json_encode($array, JSON_UNESCAPED_UNICODE);

5.3 이하

function prev_json_encode($arr) {
    array_walk_recursive($arr, function (&$item, $key) { 
    	if (is_string($item)) 
        	$item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); 
         }
     );
    return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');
}

$array = array( ... );
$encoded_array = prev_json_encode($array);

그럼 이만, 저는 다시 코드짜러 떠나보겠습니다. 연말 다들 힘내고, 좋은 일 가득하시길 바랍니다! 아자자잣!

728x90
반응형

댓글