php에서 db에 연결하여 json형태로 데이터를 추출하여
화면에 출력해보았는데
[{"user_id":"23","test2":"\ud558\ud558","test3":"2016-04-12 00:00:00"},{"user_id":"123","test2":"\ud788\ud788","test3":"2016-04-05 00:00:00"},{"user_id":"1234","test2":"\ud638\ud638","test3":"2016-04-18 00:00:00"},{"user_id":"1235","test2":"\ud06c\ud06c","test3":"2016-04-24 00:00:00"}]
이런식으로 한글부분에 \u 문자가 붙고 뒤에도 이상하게 나오는것을 확인하였다.
검색해보니
\u 는 유니코드 구분자라고 한다
받는쪽에서 디코드를 제대로 해주면 문제없이 한글데이터를 사용할 수 있다고 한다
잘못된 것이 아니니 그대로 진행하면 된다.
//////////////////////////////////////////////////////
4/27일 수정
아무래도 저 유니코드 부분을 바꿔야 될 것 같아서 찾아본 결과
버전별로 많은 바꾸는 방법이 있었다.
함수를 이용해서 euc-kr을 utf-8로 일일이 바꾸는 방법,
유니코드를 한글로 보여주는 함수 등과 같은
여러가지 방법을 했는데 잘되지않았다
내가 아래 방식으로 디비연결을 하고 데이터를 가져와 json_encode를 이용해
json 오브젝트를 만들고있었는데
<?php
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:application/json");
include ('./db_info.php');
$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_query($connect, "SET NAMES 'utf8'");
if(!$connect){
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit();
}
mysqli_set_charset($connect, "utf8");
//mysqli_query($connect, "SET NAMES utf8");
if ($result = mysqli_query($connect,"SELECT * FROM TEST2")){
$o = array();
while ($row = mysqli_fetch_object($result)) {
$t = new stdClass();
$t->user_id = $row->user_id;
$t->test2 = $row->test2;
$t->test3 = $row->test3;
$o[] = $t;
unset($t);
}
} else {
$o = array( 0 => 'empty');
}
$encode = json_encode($o);
echo $encode;
mysqli_close($connect);
?>
하여 encode를 출력하면 계속 한글부분이 유니코드로
[{"user_id":"1","test2":"\ud558\ud558\ud558","test3":"2016-03-28"},{"user_id":"2","test2":"\ud638\ud638\ud638","test3":"2016-04-05"},{"user_id":"3","test2":"\ud788\ud788\ud788","test3":"2016-04-11"},{"user_id":"4","test2":"\ud14c\uc2b7\ud750\uc785\ub2c8\ub2e4","test3":null}]
이런식으로 나오는데 여러가지 해결방법을 시도해 보았지만 되지않았다.
///////////////////////////////////
그런데
echo json_encode($o, JSON_UNESCAPED_UNICODE)
위방법으로 하니
[{"user_id":"1","test2":"�섑븯��","test3":"2016-03-28"},{"user_id":"2","test2":"�명샇��","test3":"2016-04-05"},{"user_id":"3","test2":"�덊엳��","test3":"2016-04-11"},{"user_id":"4","test2":"�뚯듂�먯엯�덈떎","test3":null}]
이런식으로 나와 더 미궁에 빠졌는데
알고보니
header("Content-Type:application/json");
json 헤더 선언부분, 이부분이 뭔가 이상한거 같아 지워서 출력해보니
[{"user_id":"1","test2":"하하하","test3":"2016-03-28"},{"user_id":"2","test2":"호호호","test3":"2016-04-05"},{"user_id":"3","test2":"히히히","test3":"2016-04-11"},{"user_id":"4","test2":"테슷흐입니다","test3":null}]
이런식으로 제대로 나오기 시작했다.
해결을 하기는 했지만 원인은 아직 잘 모르겠다.
'공부 > php' 카테고리의 다른 글
(json) jsonobject 안에 jsonarray (0) | 2016.04.28 |
---|---|
(php db연결) select 후 json 만들기 (1) | 2016.04.23 |
(db연결) 레코드, 필드 개수 구하기 (0) | 2016.04.23 |
(db연결) mysql_connect 연결 실패 (0) | 2016.04.23 |