문자열을 처리하는데 있어서 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

---=------
아.. 소스 조금 수정되었음

반응형
,