본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/php

String 인코딩 확인 후 UTF-8 변환하기 mb_detect_encoding

by 미노드 2018. 10. 6.

웹 페이지를 개발하다 보면 흔히 겪는 일이있다.

 

바로 한글이 깨져서 나오는 경우.

한글이 깨져서 DB에 저장되는 경우.

등등...

 

대부분의 이유는 전달받을 때 또는 출력할 때 인코딩이 깨진 게 이유일 확률이 높다.

특히 전달받은 문자가 인코딩이 다르게 설정된 채로 전달되는 경우도 있으니, 특정 문자만 인코딩을 변경 할 필요도 있다.

바로 mb_detect_encoding를 이용하면 되는데 아래처럼 쓸 수 있다.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/* $str의 문자 인코딩을 출력한다. */
echo mb_detect_encoding($str);
 
 
해당 함수에서 사용되는 캐릭터셋의 종류는 mb_list_encodings() 함수를 쓰면 배열로 리턴되어 알 수 있다.
Array
(
    [0=> pass
    [1=> auto
    [2=> wchar
    [3=> byte2be
    [4=> byte2le
    [5=> byte4be
    [6=> byte4le
    [7=> BASE64
    [8=> UUENCODE
    [9=> HTML-ENTITIES
    [10=> Quoted-Printable
    [11=> 7bit
    [12=> 8bit
    [13=> UCS-4
    [14=> UCS-4BE
    [15=> UCS-4LE
    [16=> UCS-2
    [17=> UCS-2BE
    [18=> UCS-2LE
    [19=> UTF-32
    [20=> UTF-32BE
    [21=> UTF-32LE
    [22=> UTF-16
    [23=> UTF-16BE
    [24=> UTF-16LE
    [25=> UTF-8
    [26=> UTF-7
    [27=> UTF7-IMAP
    [28=> ASCII
    [29=> EUC-JP
    [30=> SJIS
    [31=> eucJP-win
    [32=> SJIS-win
    [33=> CP932
    [34=> CP51932
    [35=> JIS
    [36=> ISO-2022-JP
    [37=> ISO-2022-JP-MS
    [38=> Windows-1252
    [39=> Windows-1254
    [40=> ISO-8859-1
    [41=> ISO-8859-2
    [42=> ISO-8859-3
    [43=> ISO-8859-4
    [44=> ISO-8859-5
    [45=> ISO-8859-6
    [46=> ISO-8859-7
    [47=> ISO-8859-8
    [48=> ISO-8859-9
    [49=> ISO-8859-10
    [50=> ISO-8859-13
    [51=> ISO-8859-14
    [52=> ISO-8859-15
    [53=> ISO-8859-16
    [54=> EUC-CN
    [55=> CP936
    [56=> HZ
    [57=> EUC-TW
    [58=> BIG-5
    [59=> EUC-KR
    [60=> UHC
    [61=> ISO-2022-KR
    [62=> Windows-1251
    [63=> CP866
    [64=> KOI8-R
    [65=> KOI8-U
    [66=> ArmSCII-8
    [67=> CP850
    [68=> JIS-ms
    [69=> CP50220
    [70=> CP50220raw
    [71=> CP50221
    [72=> CP50222
)
 

 

예시는 다음과 같다.

1
2
3
4
5
6
7
8
$str = "인코딩확인";
$enc = mb_detect_encoding($str, array("UTF-8""EUC-KR""SJIS"));
/* 참고로 SJIS 는 일본에서 자주 쓰는 인코딩입니다. */
/* 배열안에 해당하는 캐릭터 셋을 찾아서 저장한다. */
if ($str != "UTF-8") {
        $str = iconv($enc, "UTF-8", $str);
        // $str값을 $enc라는 인코딩에서 UTF-8 로 변경하여 저장한다.
}