문자열을 가지고 놀아보자 제1부

이번 강좌는 문자열을 어떤식으로 처리할수 있는지 보여주는 의미로 만들어 졌습니다
그러니 가벼운 마음으로 잘읽어 보시기 바랍니다

그럼 시작하겠습니다

우선 사람들이 제일 많이 처리하는 문자열을 특정길이로 잘라 내는 방법을 보여들이겠습니다


1. 한글과 영문 그리고 특수문자로 이루어진 문자열을 특정길이로 잘라내기  


    %주의% - 소스를 보여주기 전에 알아두어야 할것들
      
      ① 한글(일어,중국어...기타등등) 또는 특수문자는 2바이트로 이루져 있다
          그러므로 영문보다 2배 크기를 가진다
     
      ② 한글(2바이트문자)은 아스키값 128 보다 큰 값을 가지고 있다


  일반적으로 문자열을 특정길이로 잘라낼때는 php함수 substr()를 이용 합니다
 
  그렇지만 사용해보면 알겠지만 영문 또는 한글(2바이트문자)이 쎃여 있을 경우에는
  결과를 보면 한글이 깨져서 나옵니다
 
  이러한 문제가 생기는 이유는 substr() 은 1바이트를 기준으로 문자열을 자르기 때문입니다
 
  그렇지만 우리는 이문제를 해결할수 있는 머리와 생각이 있습니다
 
  머리와 생각이 없다고요 그럼 제가 사용하는 방법을 알려들이겠습니다 걱정마세요 ^^

  
   %주의% 라고 쓰여진 곳을 봤다면 알겠지만 한글은 2바이트로 이루어져 있다고 했습니다
   여기서 2바이트 라고 한것이 키포인트 입니다
  
   우선 변수 $val 에 특정길이로 자를 문자열을 집어 넣습니다
  
   substr() 함수를 이용 문자를 자르고 나서 $tmp 라는 변수에 집넣은다음에
  
   $tmp 의 길이를 strlen() 함수를 이용 길이는 구한 다음에 $size 에집어 넣는다
  
   그런다음에 $size 만큼 for() 문을 이용 글자를 1바이트씩 읽어서

  

     %참고%

     PHP도 C언어처럼 문자열을 배열로 사용할수 있습니다
    
     예)  
             $word = "abcd";
             
             // 출력 : b
      echo $word[1];


    한글과 영문의 갯수를 각각 $han_len , $eng_len 이라는 변수에 집어넣는다
   
   
    여기서 한글과 영문을 어떻게 구분하냐는 분이 있을겁니다 위에서 %주의%라고 쓰여진 곳에서

    ② 한글(2바이트문자)은 아스키값 128 보다 큰 값을 가지고 있다  라고 봤을 겁니다

    이것을 알면 금방 머리속에서 생각을 하셨겠죠 한 글자에 아스키값을 알아내면 되겠구나 하고요

    바로 그것이죠 ok

    그런데 php는 다행이 아스키값을 알려주는 ord() 라는 함수를 제공해줍니다

    이 함수로 한글 과 영문을 구분
   
    아스키값 128 보다 작으면 영문의 갯수를 의미하는 변수 $eng_len 에  값을 1증가 시킨다
    그리고 아스키값 128 보다 크면 한글이므로 한글도 이런식으로 갯수를 증가 시킵니다

   
    이제는 한글의 갯수를 2로 나눕니다
   
    한글은 영문 보다 2배의 길이를 가진다고 했습니다
   
    그러므로
   
    나머지가 홀수 이면 한글이 깨진것입니다 그러면    

    $han_len 를 1증가 시킨다음에  $eng_len 값을 합해서 $cut_len 변수에 집어 넣습니다

    $val 를 이제는 $cut_len 크기만큼 자릅니다


    그러면 끝입니다

 

    아래는 위에 말을 구현한 소스입니다

 

 

  <?

  $val = "[응답] 이승원a 푸a하하하";

  ###  18번째 문자이하는 절단한다  ###

  $tmp = substr($val, 0, 18);

  $size = strlen($tmp);

  for($i=0; $i < $size; $i++){

  ###  ascii 문자세트 값 128인가 127 보다 크면 한글로 취급한다
  ###  함수 ord()는 문자의 ascii 문자코드 값을 구한다

  if(ord($val1[$i]) > 128){

     $han_len++;

    }

  }

$end = $han_len % 2;


###  만약 나머지가 1 이면(한글이 홀수개이면)

if($end == 1){

 

$end_str = substr($val, 0, $cut_len-1);

echo $end_str;

###  만약 나머지가 0이면(한글이 짝수개 이면)

 

}elseif($end == 0) {

###  아무짓도 않한다


echo "홀수가 아니여 ^^";


}


?>

 

2부에선 특정문자로 둘려쌓인 문자열을 빼내는 방법을 강좌해 들이겠습니다 ^^



태초에 나는 개그이야기를 만들었다.
내말을 믿고 나를 따르면 천당,
내말을 믿지않고 나를 따르지 않으면 지옥,
나는 하늘나라(우주)에 사느니라.

그럼 난 외계인?