메뉴 건너뛰기

Dev tips

PHP EUC-KR <-> UTF-8 상호변환 하기 (문자셋charset 변환)

taknim 2008.05.27 18:49 조회 수 : 16113 추천:3062

http://blog.naver.com/snazzy79?Redirect=Log&logNo=60002866673

<?
# UTF 로 무조건 변환
function change_to_utf($utfStr) {
  if (iconv("UTF-8","UTF-8",$utfStr) == $utfStr) {
    return $utfStr;
  }
  else {
    return iconv("EUC-KR","UTF-8",$utfStr);
  }
}

# UTF => EUC-KR로 변환
function iconv_to_euc_kr($get_data) {
  $work_unit = 50;

  $init_size = strlen($get_data);

  $result_data = "";

  $count = 0;

  for ( $i = 0 ; $i < $init_size ; $i++ ) {
    $cur_char = substr($get_data,$i,1);

    $t = ord($cur_char);
    if ( $t == 9 || $t == 10 || (32 <= $t && $t <= 126) ) {
      $tn = 1;
    }
    else if ( 194 <= $t && $t <= 223 ) {
      $tn = 2;
    }
    else if ( 224 <= $t && $t < 239 ) {
      $tn = 3;
    }
    else if ( 240 <= $t && $t <= 247 ) {
      $tn = 4;
    }
    else if ( 248 <= $t && $t <= 251 ) {
      $tn = 5;
    }
    else if ( $t == 252 || $t == 253 ) {
      $tn = 6;
    }
    else {
      $tn = 1;
    }

    if ( $work_unit < $tn ) {
      break;
    }

    if ( $count + $tn > $work_unit ) {
      $temp_data = iconv("utf-8","euc-kr",$work_string);
      $result_data .= $temp_data;

      $work_string = "";
      $i--;
      $count = 0;
    }
    else {
      for ( $j = 0 ; $j < $tn ; $j++ ) {
        $work_string .= $cur_char;
        $i++;
        $count++;
        $cur_char = substr($get_data,$i,1);
      }
      $i--;
    }
  }

  if ( $work_string ) {
    $temp_data = iconv("utf-8","euc-kr",$work_string);
    $result_data .= $temp_data;
  }

  return $result_data;
}

# ex.

# 수신된 메일로부터 폼값을 받을때 수신된 메일의 charset이 euc-kr이 아닌 UTF8로 오는 경우,

# 일단 무조건 UTF8로 변환한 후 EUC-KR로 재변환하여 처리해야만 한글이 깨지지 않고

# 정상적으로 표출됩니다.

# Usage.
# $fromName = change_to_utf($fromName);
# $fromName = iconv_to_euc_kr($fromName);

?>

=======================================================================================

* 관련코드

* 출처: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=51310&page=1&sfl=&stx=&spt=&page=1&cwin=#c_51473

 

/**
* UTF-8=>한글 코드페이지[949]로 변환  AJAX에서 유니코드 문자 오류
*/
function utf8_euckr(&$item, $key, $prefix = ''){
    if(is_array($item)) array_walk($item, 'utf8_euckr');
    else $item=iconv('UTF-8', 'CP949',$item);
}
/**
* 한글 코드페이지[949] => UTF-8로 변환  AJAX에서 유니코드 문자 오류
*/
function euckr_utf8(&$item, $key, $prefix = ''){
    if(is_array($item)) array_walk($item, 'euckr_utf8');
    else $item=iconv('CP949', 'UTF-8',$item);
}
/**
* 입력값
*/
@array_walk($_POST, 'utf8_euckr');

/**
* 결과값 변환
*/
@array_walk($Result, 'euckr_utf8');


번호 제목 글쓴이 날짜 조회 수
472 유용한 함수 pack, unpack, ip2long, long2ip taknim 2009.01.13 33339
471 해커들을 위한 CMD 툴 모음 file taknim 2008.05.22 32563
470 [js & php] 비밀번호 유효성 체크 - 연속 문자, 같은 문자 taknim 2011.11.09 27804
469 [Oracle] ORA-00600, ORA-06544, ORA-06553 오류 발생시 taknim 2009.06.09 23831
468 리눅스 콘솔 단축키 taknim 2009.07.06 21914
467 리눅스 split | 파일 사이즈, 라인 단위 자르기 taknim 2008.06.19 20595
466 mcrypt 암호화/복호화 AES/CBC/PKCS5/PKCS7/PADDING [1] taknim 2010.03.19 19412
465 최고의 웹디자인용 작은 아이콘 다운로드 사이트 모음 : Best Small Icon Sites taknim 2007.07.11 18936
464 [mysql] 동적 쿼리 생성시 변수를 대입하거나 값을 받아오기 taknim 2009.08.17 17152
463 [MSSQL] MS-SQL 동적쿼리 이용하기 taknim 2009.12.28 16928
462 [google map api] 구글 맵스 API 로 지도 가져오기 taknim 2012.02.09 16864
461 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16248
» EUC-KR <-> UTF-8 상호변환 하기 (문자셋charset 변환) taknim 2008.05.27 16113
459 [oracle] isqlplus 에서 특수문자(&) 입력하는 방법 taknim 2012.08.10 16045
458 [mysql] mysqlbinlog 실행시 캐릭터셋(utf8) 오류 taknim 2009.08.25 15747
457 [Oracle] DBNEWID Utility - DBNAME,DBID변경하기 taknim 2009.07.06 15565
456 inode 개념 taknim 2008.07.08 15366
455 UTF-8 을 이용해서 다국어버젼 웹사이트 개발시 고려사항 taknim 2008.10.17 15291
454 누구나 다 아는 네트워크(소켓) 통신시의 함수 pack과 unpack taknim 2008.05.17 14589
453 Postfix SMTP 서버를 이용한 IPv6 메일(SMTP) 서버 구성 taknim 2008.02.15 14443