문자열을 처리하는데 있어서 UTF-8 에서는 기존 EUC-KR 에서 하듯이 하면 안될겁니다.
아래의 방법을 응용해서 작업하시기 바랍니다.
$str = "ABCDEFGHIJKLMN";
// 글자갯수 구하기
echo iconv_strlen($str,"UTF-8"); // 결과 -> 7
// 문자열 자르기
echo iconv_substr($str,2,4,"UTF-8"); // 결과 -> CDEF
$str = "가나다라마바사아자차카타파하";
// 글자갯수 구하기
echo iconv_strlen($str,"UTF-8"); // 결과 -> 14
// 문자열 자르기
echo iconv_substr($str,2,4,"UTF-8"); // 결과 -> 다라마바
아래는 공대여자 님의 글
//=======utf8 문자열 처리함수=============
//utf8문자열을 배열로 만든다.
function php_fn_utf8_to_array($str){
$re_arr = array(); $re_icount = 0;
for($i=0,$m=strlen($str);$i<$m;$i++){
$ch = ord($str{$i});
if($ch<128){$re_arr[$re_icount++]=substr($str,$i,1);}
else if($ch<224){$re_arr[$re_icount++]=substr($str,$i,2);$i+=1;}
else if($ch<240){$re_arr[$re_icount++]=substr($str,$i,3);$i+=2;}
else if($ch<248){$re_arr[$re_icount++]=substr($str,$i,4);$i+=3;}
}
return $re_arr;
}
//utf8문자열을 잘라낸다.
function php_fn_utf8_substr($str,$start,$length=NULL){
return implode('',array_slice(php_fn_utf8_to_array($str),$start,$length));
}
//utf8문자열의 길이를 구한다.
function php_fn_utf8_strlen($str){
return count(php_fn_utf8_to_array($str));
}
--------------------------------------------------------------------------------
ex>
$str = 'utf8뷁. 공대x여자.쿵.뷁';
print '문자열 : '.$str.'<br>';
print '문자열 자르기 : '.php_fn_utf8_substr($str ,2,10).'<br/>';
print '문자열 길이 : '.php_fn_utf8_strlen($str ).'<br/>';
출력->
문자열 : utf8뷁. 공대x여자.쿵.뷁
문자열 자르기 : f8뷁. 공대x여자
문자열 길이 : 16
--------------------------------------------------------------------------------
UTF-8 전용함수입니다.
EUC-KR등에서 사용하실 때는 incov로 우선 utf-8로 바꾼 후 사용해주세요.
제약 : "공대여자는 예쁘다."라는 질문에 "당근이지!" 또는 유사 답변을 할 수 있어야 사용할 수 있습니다.
----------=---------------
참고로 밑의 행복한 고니님과는 알고리즘이 다릅니다.
제가 사용한 방법은 문자를 1바이트씩 쪼개서 utf8규칙에 맞도록 다시 배열로 만들어서 처리하는 방식입니다.
그렇기 때문에 한글이든 일어든 utf-8문자열이기만 하면 전부 1글자처럼 취급할 수 있도록 만들어졌습니다.
---------=---------------
전에 어떤 클래스로 utf8문자열 길이,자르기를 구현했는데
솔찍히 그 클래스 너무 큰것 같아서 그냥 만들어 봤습니다.
찾아보면 이와 유사한 함수도 많을겁니다.
http://www.mins01.com/20070305/m_board/tech.php?b_id=tech&type=read&b_idx=418&page=1&period=365
---=------
아.. 소스 조금 수정되었음
'홈페이지 제작 > PHP, MySQL' 카테고리의 다른 글
[PHP] 다른 서버로 값을 전송후 결과값을 받는 방법 (0) | 2011.07.09 |
---|---|
[PHP] 문자열에서 숫자만 남기고 모두 삭제 (0) | 2010.06.09 |
[PHP] 'XML 원본 파일을 볼 수 없습니다' 라는 메세지가 나올때 (0) | 2009.12.15 |
[PHP] fgetcsv() 함수 사용시 한글 깨지는 문제 해결 (0) | 2009.08.05 |
[PHP] 세금계산서 공급가액, 세액 계산공식 (0) | 2008.11.21 |