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)
 
댓글 없음:
댓글 쓰기