PHP용 utf8 문자열 제어함수 (mb함수등이 지원 안될때)

//=======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

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

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📅 달력형