데이터베이스,json 결과를 euckr 또는 utf8로 변환하기
데이터베이스 결과를 특정 캐릭터셋으로 변환하는 방법입니다.
방법은 다음과 같은것을 생각할 수 있습니다.
1. 데이터베이스 결과를 원하는 캐릭터셋으로 설정한다
2. 가져온 결과를 특정 캐릭터셋으로 변환한다.
여기선 위 2에 해당하는 부분입니다.
1에 대한 부분은 커넥션 한 다음 set names euckr 명령 한번 내려 주변 됩니다.
두번째 가져온 결과를 변환하는 방법은 간단 합니다.
이건 꼭 데이터베이스 뿐만 아니라 json 같은곳에서도 사용할 수 있습니다.
...
...
while( $aRs = @mysqli_fetch_assoc($oResult) )
{
extract($aRs);
# 캐릭터셋 euckr로 변경하기
foreach ( $aRs as $key => $val )
{
$val_euckr = mb_convert_encoding($val, 'euc-kr', 'utf-8');
$aRs[$key] = $val_euckr;
}
}
위 부분을 약간 더 다듬어서 함수로 만들어 보았습니다.
$aTest = array();
$aTest[0] = 1;
$aTest[1] = '한글';
$aTest[2] = 'eng';
print_r($aTest);
$aTest2 = cnv_ary_utf82euckr($aTest, '');
print_r($aTest2);
/**
*
* 배열의 utf8 값을 euc로 변환 시킨다.
*
* $aRs : 문자열을 가지고 있는 1차원 배열
* $cols : 변환을 제외 시킬 필요가 있는 컬럼(배열키)
*
*/
function cnv_ary_utf82euckr($aRs, $cols='')
{
# 제외 시킬 컬럼명
$aCols = array();
if ( $cols ) {
$cols = str_replace(' ', '', $cols);
$aCols = explode(',', $cols);
}
foreach ( $aRs as $key => $val )
{
// echo "$key - $val \n";
// $val = trim($val);
if ( in_array($key, $aCols) ) {
}
elseif ( is_numeric($val) ) {
}
else {
$val_euckr = mb_convert_encoding($val, 'euc-kr', 'utf-8');
$aRs[$key] = $val_euckr;
}
}
return $aRs;
}