YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

한글,영문 가리지 않고 문자열 길이대로 짜르기

페이지 정보

작성자 MintState 댓글 0건 조회 12,249회 작성일 08-11-03 10:24

본문

한글,영문 가리지 않고 문자열 길이대로 짜르기
 
<? 
//한글,영문 구분하지 않고 길이대로 짜르기 
function my_substr($str,$start,$max_len) 
{ 
    $arrayString=getArrayString($str); 
    $count=0; 
        for($i=0;$i<count($arrayString);$i++) 
        { 
                if($count>=$max_len) break; 
                if($i>=$start){ 
          $return_str.=$arrayString[$i]; 
                $count++; 
                } 
        } 
        return (count($arrayString)>$max_len)?$return_str."..":$str; 
} 

//바이트 개산 배열 
function getArrayBytes($str) 
{ 
  $byte1=0; //2바이트 문자의 첫번째 바이트 
  $byte2=0; //2바이트 문자의 두번쨰 바이트 
  for($i=0;$i<strlen($str);$i++) 
        { 
            if($byte1==1) //2바이트 문자의 첫번째 바이트가 있다면 
                        $byte2=1; //두번쨰 바이트도 있다. 

            if(ord($str[$i])>127 && $byte1==0){ //2바이트 문자중 한 바이트이고 첫번쨰 바이트가 없다면 
                          $byte2=0; //두번째 바이트는 없고 
                      $byte1=1; //첫번째 바이트는 있다 
                }else if(ord($str[$i])<=127){ 
                     $byte1=0; 
                         $byte2=0; 
                } 
                 
                if($byte2==1) //2바이트 문자의 두번째 바이트가 있다면 
                        $byte1=0; //첫번째 바이트는 없다. 
           $bytes[$i]=$byte1.$byte2; 
        } 

        return $bytes; 
} 
//바이트을 무시한 문자열 배열 
function getArrayString($str){ 
  $bytes=getArrayBytes($str); 
  $k=0; 
  for($i=0;$i<strlen($str);$i++){ 
         //2바이트 문자가 아닌경우 
         if($bytes[$i]=="00") { $temp_str[$k]=substr($str,$i,1);$k++; } 
     //2바이트 문자의 첫번째 경우 
         //2바이트 문자의 두번째 경우 
     if($bytes[$i]=="01"){ $temp_str[$k]=substr($str,$i-1,2);$k++;} 

  } 

  return $temp_str; 
} 

//연습---- 
$str="뮤직abc001" 
echo my_substr($str,0,3); ==>"뮤직a"가 출력됩니다.. 
?> 


문자열 뒤에서 부터 자르기
for($i=1;$i<=25;$i++)
{
echo back_cut("문자열을 뒤에서부터 자르기", $i)."\n<br>";
}

function back_cut($str,$len,$head="") 
{ 
    if(strlen($str)<=$len) 
    { 
    return $str; 
    } 

$str2=substr($str,$len*-1); 
$size=strlen($str2); 

    for($i=$size,$j=1;$j<=$size;$i--) 
    { 
    $chr=substr($str2,$j*-1,1); 

        if(ord($chr)>127)  
        { 
        $j++; 
        $chr=substr($str,$j*-1,1).$chr; 
        } 

    $result=$chr.$result; 
    $j++; 
    } 

return $head.$result; 
}


정규식을 이용한 문자열 자르기
str_cutting("원하는문자열",길이);
<? 

    for ($x=1; $x<35;$x++) { 
       echo "$x : ".str_cutting("테스트문장 입니다. 잘되지요;;",$x)."<br>"; 
    } 
    //여기까지는 예제 입니다 

    
    function str_cutting($str, $len){ 
       //먼저 무조건 자르고 
       //한글이 아닌건 한글자씩 세고 다른건 두글자씩 센다 
       preg_match('/([\x00-\x7e]|..)*/', substr($str, 0, $len), $rtn); 


       //원래 글 길이가 길면 점점점을 붙여준다(이 아랫줄은 선택) 
       if ( $len < strlen($str) ) $rtn[0].="..."; 
        
       return $rtn[0]; 
    } 

?>

댓글목록

등록된 댓글이 없습니다.

Total 165건 5 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
65 MintState 19196 11-03
64 MintState 26090 11-03
63 MintState 12709 11-03
62 MintState 18589 11-03
61 MintState 20549 11-03
60 MintState 15158 11-03
59 MintState 14291 11-03
58 MintState 11897 11-03
57 MintState 12198 11-03
56 MintState 18183 11-03
55 MintState 14962 11-03
54 MintState 16083 11-03
53 MintState 16899 11-03
52 MintState 12370 11-03
열람중 MintState 12250 11-03
50 MintState 12951 11-03
49 MintState 13094 11-03
48 MintState 14287 11-03
47 MintState 13414 11-03
46 MintState 13445 11-03
45 MintState 14336 10-31
44 MintState 12191 10-31
43 MintState 12528 10-31
42 MintState 14973 10-31
41 MintState 10721 10-31
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™