본문 바로가기
코딩/php

[PHP] 특정 문자열만 인코딩 변환 시키는 방법 (base64_decode, 한글이 깨질때)

by 우월한하루 2022. 12. 16.
728x90
반응형

서문

php로 개발을 하다 보면 암호화 복호화를 할 때도 많고, 여러 가지 언어를 사용하다 보니 한글이 깨질 때도 많습니다.

 

언어셋이 맞지않을 경우
언어셋이 맞지않을 경우

 

이럴 때 사용하는 방법이 여러 가지가 있는데 그중 2가지 방법을 소개해볼까 합니다.

 


1. 페이지 전체의 문자 셋 변경

헤더 안에 아래와 같이 charset을 변경해줄 수 있습니다.

 

<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

혹은 아래와 같이 charset을 UTF-8로 변경해 주는 것입니다.

 

<?php header("Content-Type:text/html;charset=utf-8"); ?>

 

이 부분의 단점은 이미 다 코딩해 둔 코드들의 문자 셋도 변경이 되어, 기존에 잘 나오던 문자들도 깨져서 나올 수 있다는 점입니다.

 

기존에 잘 나오던 문자열들이 깨져서 나오는 현상 발생
기존에 잘 나오던 문자열들이 깨져서 나오는 현상 발생

 

기존에 깨져서 나오던 문자열은 잘 나오지만, 기존에 잘 나오던 문자들이 깨져서 나오는 반대의 현상이 발생합니다.

이럴 땐 다음 방법을 사용해 보길 권장합니다.

 

2. 특정 문자열의 문자 셋만 변경

이번에는 제가 다른 페이지에서 가져온 문자열의 인코딩만 변경해 주는 것입니다.

 

$get_text = "내가 가져온 한글 텍스트";
$test_text = iconv("UTF-8", "EUC-KR", $get_text);

 

이런 식으로 사용해서 utf-8을 EUC-KR로 인코딩해줄 수 있습니다.

 

iconv("현재인코딩", "변경할인코딩", "인코딩 변경할 문자열");

 

위와같은 형식으로 iconv를 작성 할 수 있습니다.

그리고 iconv와 비슷한 방식으로 다른 하나는 mb_convert_encoding이 있습니다.

 

$get_text = "내가 가져온 한글 텍스트";
$test_text = mb_convert_encoding($get_text , "EUC-KR", "UTF-8");

 

iconv와 마찬가지로 인코딩 변환이 가능합니다.

 

mb_convert_encoding("인코딩 변경할 문자열", "변경할인코딩", "현재인코딩");

 

mb_convert_encoding 은 위와같은 형식으로 작성하여 사용할 수 있으며, mb_convert_encoding를 사용하면 간단하게 인코딩이 가능합니다.

 

결론

오늘 포스팅을 통해 특정 문자열만 인코딩을 변경하는 방법을 알아보았습니다.

갑작스러운 문자 인코딩 문제로 고민하고 있을 분들을 위해 오늘의 글이 도움이 되셨으면 좋겠습니다.

현재 문자열의 인코딩이 무엇인지 체크하는 것도 가능하므로 이 내용은 다음 글에서 다뤄보도록 하겠습니다.

728x90
반응형

댓글