한글,영문 가리지 않고 문자열 길이대로 짜르기
페이지 정보
작성자 MintState 댓글 0건 조회 12,528회 작성일 08-11-03 10:24본문
한글,영문 가리지 않고 문자열 길이대로 짜르기
문자열 뒤에서 부터 자르기
정규식을 이용한 문자열 자르기
str_cutting("원하는문자열",길이);
<? //한글,영문 구분하지 않고 길이대로 짜르기 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]; } ?>
|
댓글목록
등록된 댓글이 없습니다.