2010년 3월 10일 수요일
PHP 문자열 자르기
[code php]$tmpstr = strip_tags($str); // str 변수는 원문이며 외부에서 이함수를 호출할때 전달됩니다..
if(strlen($tmpstr) <= $str_len) return $str; // 테그없앤 글자수가 자를갯수보다 작거나 같으면 그냥 리턴
else { //그게 아니면
if(ord(substr($tmpstr,$str_len,1)) >= 127) { // 테그를 제거한 문자열에서 자를 길이를 시작점으로 1바이트문자를 떼어왔을때 이 문자열의 아스키값이 127이라면 이는 2바이트의 한글또는한자등으로 간주
if(strlen($tmpstr) != strlen($str)) $str_len--; // 테그를 제거한 문자열이 원문과 다를때 즉 테그가 포함되어있을경우
if(ord(substr($tmpstr,$str_len,1)) >= 127) $cutn = 2; // 테그를 제거한 문자열을 지정된 길이만큼으로 시작점을 주어 1바이트를 떼어온것이 아스키값이 127일때 즉 한글이나 그이상일때는 비교에 사용될 길이를 2로 지정합니다..
else $cutn = 1; //그게아니면 1바이트
for($i=0;$i= 127) { // 한글이나 그이상일때
$orc = substr($str,$i,2); // 원문에서 시작점을 i 값으로 주어 2바이트를 떼어옵니다..
$src = substr($tmpstr,$str_len,$cutn); // 비교대상인 테그를 제거한 문자열은 시작점을 자를길이로 지정하고 위에서 정의한 cutn 값만큼 가져옵니다..
if($orc == $src ) { // 두개를 비교해서 같으면 자를 위치를 찾은것..
$pos = $i; // 그 위치값을 기억해둡니다...
break; //루프를 빠져나갑니다..
}
$i++; // 2바이트의 한글이나 그이상값을 만나서 비교했찌만 자를위치가 아니기때문에 i값을 하나더 더해서 루프시킵니다..
} else { // 한글이나 그이상문자열이 아닌 1바이트문자일때..
$orc = substr($str,$i,1);
$src = substr($tmpstr,$str_len,$cutn);
if($orc == $src) {
$pos = $i;
break;
}
}
}
$str2 = substr($str,0,$pos); // 이부분은 원문에서(테그가 포함된) 위에서 찾은 위치만큼 자릅니다...
if(strlen($tmpstr) != strlen($str)) { //테그가 있을때
$tstr = substr($str,$pos); // 잘린위치부터 끝까지반환
$tags = strip_tags($tstr); // 테그를없앰
$tags2 = str_replace($tags,"",$tstr); //테그만 남기고 제거
} else $tags2 = ""; // 테그가 없으면 이 변수는 초기화
$str = $str2."...".$tags2; // 나머지 테그를 붙여서 완성! //아래도 동일
} else {
if(strlen($tmpstr) != strlen($str)) { //테그가 있는거다
$tstr = substr($str,$str_len); // 잘린위치부터 끝까지반환
$tags = strip_tags($tstr); // 테그를없앰
$tags2 = str_replace($tags,"",$tstr); //테그만 남기고 제거
}
else $tags2 = "";
$str = substr($str,0,$str_len)."...".$tags2;
}
return $str; //완성된것을 리턴
}[/code]
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기