[팁] 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 "<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>
댓글 전체
torry님 스킨은 항상 깔끔하고 예쁘네요^^;
구경 자~알 했습니다^^;
앞으로도 멋진 스킨, 멋진 팁.
많이 많이 부탁드립니다^^;
구경 자~알 했습니다^^;
앞으로도 멋진 스킨, 멋진 팁.
많이 많이 부탁드립니다^^;

애고.... 접근 제한 지역입니다. ^.^

아래의 답글을 봤습니다. 해결 잘 하셨더군요. ^.^
감사합니다.
감사합니다.
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는 단순히 태그를 잘라주는(태그가 출력되지 않도록) 역할만 수행합니다.
//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:.....}의 패턴을 찾아내는 방법을 모르겠습니다. 그냥, 손으로 몇 줄 대충 썼습니다. 이것만 되면, 위의 함수는 실전에 바로 써도 되겠는데......
ㅋㅋㅋ