[함수] 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;
}
'개발-PHP' 카테고리의 다른 글
[함수] CURL 로 멀티 쓰레드 날리기 (0) | 2016.03.30 |
---|---|
[함수] 다중(타)디비 컨넥 이용하기 (php클래스) (0) | 2016.03.30 |
[함수] 구글 번역 API를 이용한 파일 번역 php (0) | 2016.03.30 |
[함수] htmlspecialchars_decode와 html_entity_decode의 문자열 처리의 다른 점 (0) | 2016.03.30 |
[함수] PHP - cURL 대용 Purl (0) | 2016.03.30 |