json_encode, json_decode 한글깨짐 유니코드문제 api 호출값 xml 소스 db저장 방법
제이슨 인코더 디코더를 사용시 한글이 깨지는 현상이 있습니다.
api로 받아온 데이터가 xml 이라면
그리고 이 정보를 디비에 저장해서 사용하려면 굳이 제이슨을 사용하실 필요가 없습니다.
- api로 읽어본 데이터를 db에 저장하는 목적은
api를 사용시 호스트 서버가 응답이 늦을 경우 클라이언트가 지연시간동안 랙이 걸립니다.
랙뿐만 아니라 잘못된 처리로 에러를 유발시키기도 하지요.
그리고 api 호출수도 제한된 경우가 있기 때문이구요 -
json_encode, json_decode 한글깨짐 유니코드문제 api 호출값 xml 소스 db저장 방법
저 같은 경우에도 json encoder, json decoder 를 사용시
디비에 저장하지 않고 바로 출력하면 한글이 잘 나오지만(크롬)
디비에 저장시 한글이 유니코드 형식의 문자로 저장되는 문제가 있더군요
검색결과 여러 가지 다양한 방법이 있지만
제 서버 환경 PHP ver 5.3 에서는 어려움이 있네요.
물론 urlencode, urldecode 로 한글만 좀더 디테일하게 다루면 해결은 되겠지만
코딩을 그냥 쉽게 처리하는 방법을 택했습니다.
자주 사용한다면 함수하나 만들어 놓으면 좋겠네요~
아무튼 안될때는 돌아가는게 현명한 방법이기도 합니다^^
xml을 소스를 db에 저장해서 db의 내용을 다시 배열로 처리하니 문제없이 깔끔하게 동작하네요.
스킴은 아래의 내용을 참고하세요.
// json 사용예
$api_url = "http://url";
$xml_row = file_get_contents($api_url) ;
$xml_row = simplexml_load_string($xml_row);
$j_encode = json_encode($xml_row); // encode 시 한글이 유니코드로 변환되는 문제!
$json_data = json_decode($j_encode); //array
// xml 소스 유지예
$api_url = "http://url";
$xml_row = file_get_contents($api_url) ;
if (strstr($xml_row,'원하는필드')) // 정보가 있으면 db에 저장
{
$sql = " insert into $table
set val = '$wr_num', content = '$xml_row' ";
mysql_query($sql);
}
if (strstr($xml_row, ‘원하는필드’))
{
$xml_data = simplexml_load_string($xml_row);
$ii=0;
foreach ($xml_data->body->items->children() as $item)
{
$restday[$ii]['data1'] = $item->data1;
$restday[$ii]['data2'] = $item->data2;
$ii++;
}
}
한글표현이 문제라면 위와 같은 방법으로 대체하셔도 되겠습니다.
'유지보수' 카테고리의 다른 글
연속 로그인시 보너스 포인트 적립 소스 (0) | 2017.04.18 |
---|---|
커뮤니티 사이트 제작 후기 (0) | 2017.04.18 |
구글지도 api 키 발급방법, This page didn't load Google Maps correctly. See the JavaScript console for technical details (0) | 2017.01.25 |
홈페이지 레이아웃 깨짐 깨지는 현상, 사진 잘림 잘리는 현상 유지보수 (0) | 2016.08.22 |
홈페이지 슬라이드 제작, 슬라이드 교체, 홈페이지 리뉴얼 (0) | 2016.08.22 |