반응형
php에서 한글데이터를 가져오거나 할때 한글이 깨지는 케이스가 크게 2가지가 있습니다.
첫번째 인코딩이 맞지 않을때!!
우선 php 설정이 한글로 되어 있어야 합니다.
보통 collation을 utf8_general_ci 으로 설정해 주면 됩니다.
설정후 한글 데이터를 입력하면 php내에서 한글이 깨지지 않습니다.
그리고 쿼리를 실행합니다.
json으로 print 했더니 위와 같이 한글이 깨져서 나옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 | $con = mysql_connect($host,$uname,$pwd) or die("connection failed"); mysql_select_db($db,$con) or die("db selection failed"); mysql_query("set session character_set_connection=utf8;"); mysql_query("set session character_set_results=utf8;"); mysql_query("set session character_set_client=utf8;"); $r=mysql_query("select * from intro",$con); $row=mysql_fetch_array($r ); print(json_encode($row); mysql_close($con); | cs |
php안에 mysql connect 아래에 위 코드의 Line4~6을 복사해 주세요.
실행을 해보면 위와 같이 출력되는데 아까처럼 깨진건 아니고, decoding이 안된 상태입니다.
이 경우 unescape를 해줘야 합니다.
두번째 UNESCAPE
1 2 3 4 5 6 7 8 9 10 11 12 | $con = mysql_connect($host,$uname,$pwd) or die("connection failed"); mysql_select_db($db,$con) or die("db selection failed"); mysql_query("set session character_set_connection=utf8;"); mysql_query("set session character_set_results=utf8;"); mysql_query("set session character_set_client=utf8;"); $r=mysql_query("select * from intro",$con); $row=mysql_fetch_array($r ); print(json_encode($row,JSON_UNESCAPED_UNICODE)); mysql_close($con); | cs |
PHP에서는 UNESCAPE가 자동으로 되지않아 함수로 따로 만들어 주거나 해야합니다.
하지만 json_encode를 이용하면 Line 11과 같이 파라메터를 하나만 더 써주면 됩니다.
처음 mysql에 넣었던 것처럼 한글이 깨지지 않고, 그대로 출력되었습니다.
반응형
'Study > Database' 카테고리의 다른 글
SQL datetime 형식 주의점 (0) | 2016.09.01 |
---|---|
db 외부접속 안될때 (0) | 2016.08.29 |
SQL (DATABASE) 명령어4-Having (0) | 2016.07.28 |
SQL (DATABASE) 명령어3-group by (0) | 2016.07.27 |
SQL (DATABASE) 명령어2-수식및 연산자 (0) | 2016.07.26 |