개발-PHP

[함수] EUC-KR 환경에서 유니코드 문자 손상 없이

WEBKIKIS 2016. 3. 30. 17:22
반응형

[함수] EUC-KR 환경에서 유니코드 문자 손상 없이


// [PHP팁] EUC-KR 환경에서 유니코드 문자 손상 없이 변환하기





원리
한 글자 한 글자씩 나아가면서
mb_convert_encoding으로 변환한 것(깨지는 문자인 경우 대체 문자를 반환한 후 넘어가기)
iconv(깨지는 문자인 경우 변환 중단)
이것을 하나씩 비교하여, 값이 같을 경우(깨지지 않는 문자인 경우) 그대로 두고,
값이 다를 경우(깨지는 문자인 경우) HTML 엔티티로 변환시킨다.

 $i    원본 글자    iconv("UTF-8","EUC-KR//IGNORE",$str);    같음? mb_convert_encoding($str,"euc-kr","utf-8");    $result
0    안    안    =    안    안
1    녕    녕    =    녕    안녕
2    你    !=    O`    안녕你
3    好    好    =    好    안녕你好
4    吗    !=    T    안녕你好吗


사용방법
중복되지 않게 주의하여 함수선언을 한 후 EUC-KR 환경에서
html_enc_convert($str, "utf-8", "euc-kr");
// 환경에 따라 코드페이지가 달라질 수 있다.


이렇게 설정하여 DB에 저장하기 전에 이 함수를 사용하면 깨지는 문자 부분만 HTML 엔티티로 저장되어 깨지지 않게 된다.
mb_convert_encoding($문자열, "html-entities","utf-8") 이렇게 간단하게 한줄짜리 함수로 할 수 있지만, 그러면 모두 엔티티로 바뀌어 버려 텍스트량 낭비가 너무 커진다.


링크 : http://www.todayhumor.co.kr/board/view.php?table=computer&no=141131



function html_enc_convert($str, $before_enc, $after_enc)
{
$i=0;
$result = "";
$len = mb_strlen($str, $before_enc);
while ($i <= $len)
{
if (mb_convert_encoding(mb_substr($str,$i,1,$before_enc), $after_enc, $before_enc) ==iconv($before_enc,$after_enc,mb_substr($str,$i,1,$before_enc)))
$result .= mb_convert_encoding(mb_substr($str,$i,1,$before_enc), $after_enc, $before_enc);
    
else
$result .= mb_convert_encoding(mb_substr($str,$i,1,$before_enc), "html-entities", $before_enc);
 
$i++;
}
return $result;
}



SISO 개발문의하기 ->

반응형