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]

댓글 없음:

댓글 쓰기