[팁] 5월 17일자 게시판 수정에서: (해결) 여기에서 쓴 함수 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

[팁] 5월 17일자 게시판 수정에서: (해결) 여기에서 쓴 함수 정보

일반 [팁] 5월 17일자 게시판 수정에서: (해결) 여기에서 쓴 함수

본문

위의 것을 해결하는데, cut_str() 대신에 아래의 함수를 썼습니다. 
즉,

echo "<a href='{$list[$i][href]}'>".cut_str(strip_tags($list[$i][content]), 120, '......')."</a>"; --> 대신에

echo "<a href='{$list[$i][href]}'>".Shorten_String(strip_tags($list[$i][wr_content]), 200, '......')."</a>"; --> 이것을 썼습니다.  아래의 Shorten_String() 함수와 php의 strip_tags()함수를 썼더니, html 태그는 물론, 가변 파일 태그, {img....}를 없앨 수 있었습니다.

아래의 함수가 필요하신 분이 있을까봐 올립니다.

<pre>
<?
if (!defined('_GNUBOARD_')) exit;
/*-------------------------------------------------------------
문자열 길이 구할때 태그는 제외시킴
$String : 원본 문자열
$MaxLen : 자를 문자열 길이
$ShortenStr : 말줄임 문자열
--------------------------------------------------------------*/
function Shorten_String($String, $MaxLen, $ShortenStr) {
$StringLen = strlen($String); // 원래 문자열의 길이를 구함
for ($i = 0, $count = 0, $tag = 0; $i <= $StringLen && $count < $MaxLen; $i++ ) {
$LastStr = substr($String, $i, 1);
if ($LastStr == '<') $tag = 1; // 태그 시작
if ($tag && $LastStr == '>') { $tag = 0; continue; } // 태그 끝
if ($tag) continue; if ( ord($LastStr) > 127 ) { $count++; $i++; }
$count++;
// 2바이트문자라고 생각되면 $i를 1을 더 증가시켜 결국은 2가 증가하게 된다.
// 다음에 오는 1바이트는 당연 지금 바이트의 문자에 귀속되는 문자이다.
}
//"{img"로 시작되는 가변 파일 관련 문자열을 없앰.
// 전체 패턴을 찾아내는 방법은 모르겠습니다. 아시는 분이 있으면 알려주십시오.
$source[] = "{{img:0 align=left hspace=10}}";
$source[] = "{{img:0 align=right hspace=10}}";
$source[] = "{{img:0 hspace=10}}";
$source[] = "{{img:0}}";
$source[] = "{{img:1 align=right hspace=10}}";
$source[] = "{{img:2 align=left hspace=10}}";
$target ='';
 
$String = preg_replace($source, $target, $String);//본문 글에 rich 가변 파일이 있으면, ''으로 처리

$RetStr = substr($String, 0, $i); // 위에서 구한 문자열의 길이만큼으로 자른다.
if ($count<$MaxLen) return $RetStr; else return $RetStr .= $ShortenStr; // 여기에 말줄임문자를 붙여서 리턴해준다.
}
/*--------------------------------------------------------------*/

/*-------------------------------------------------------------
태그는 짤리지 않도록 문자열을 잘라주는 함수
--------------------------------------------------------------*/
function cutStrWithoutTags($str, $length, $printDot = false){
$strLength = strlen($str);
if($strLength <= $length) return $str;
// 검사할 패턴을 배열에 저장
$dot = '...';
$offsetOneByteChar = 0;
$isTwoByteChar = false;
$chr = '';
$chrCode = 0;
if(ord($str[$length-1]) >= 128) {
$isTwoByteChar = true;
}
for($i = $length - 1; ; $i--) {
$chr = $str[$i];
$chrCode = ord($chr);
if($isTwoByteChar) {
if($chrCode < 128) {
$offsetOneByteChar = $length - $i + 1;
$isTwoByteChar = false;
}
}
if($chr == '>' || $i <= 0) {
return substr($str, 0, $length - ($offsetOneByteChar % 2)) . $dot;
}elseif($chr == '<' && eregi("[a-z]", $str[$i+1])) {
return substr($str, 0, $i) . $dot;
}
}
}

/*-------------------------------------------------------------
HTML 태그를 없애 주는 함수
--------------------------------------------------------------*/
function strip_tags_in_big_string($textstring){
  while (strlen($textstring) != 0)
      {
      $temptext = strip_tags(substr($textstring,0,1024));
      $safetext .= $temptext;
      $textstring = substr_replace($textstring,'',0,1024);
      }   
  return $safetext;
}
?>
<pre>

댓글 전체

echo "<TR><TD VALIGN='TOP'>"; // 이 아래가 문제
        //echo "<a href='{$list[$i][href]}'>".cut_str(strip_tags($list[$i][wr_content]), 120, '......')."</a>";//태그만 출력되
지 않음. 비정상.
        echo "<a href='{$list[$i][href]}'>".cut_str($list[$i][wr_content], 120, '......')."</a>";//태그효과 적용, 의도 정상.
        //echo "<a href='{$list[$i][href]}'>".cut_str($list[$i][content], 120, '......')."</a>";//게시물 작성시 적용했던 html>체크가 활성화 되지 않음.
        echo "</TD></TR></TABLE>";

업로드 하신 자료의 list.skin.php파일에서 146라인 부분을 주석처리한 3가지 방법처럼 테스트 해 보시기 바랍니다.
html 효과가 '목록에서 내용체크 > 효과적용' 되기 위해서는 2번째 사용했던 방법처럼 기재하셔야 합니다.
strip_tags는 단순히 태그를 잘라주는(태그가 출력되지 않도록) 역할만 수행합니다.
위의 Shorten_String() 함수에서 가변 파일 태그인 {img:.....}의 패턴을 찾아내는 방법을 모르겠습니다.  그냥, 손으로 몇 줄 대충 썼습니다.  이것만 되면, 위의 함수는 실전에 바로 써도 되겠는데......
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT