테스트 사이트 - 개발 중인 베타 버전입니다

단어 필터링 검색 소스좀 봐주세요.. 채택완료

익명닉네임 10년 전 조회 7,161

</p><p><?php</p><p>$filter = explode(",", trim($config['cf_filter']));</p><p>for ($i=0; $i<count($filter); $i++) {</p><p>  $str = $filter[$i]; // 필터단어의 앞뒤 공백을 없앰</p><p>  $pos = stripos($search, $str);</p><p>  if ($pos !== false) {</p><p>?></p><p>      <p><em>'<?php echo $search ?>'</em> 는 금지 단어 필터에 의해 차단되어있습니다.</p></p><p>      <ul></p><p>        <li><em>'<?php echo $str ?>'</em> 란 단어는 금지단어 필터에 추가된 단어 입니다.</li></p><p>        <li>잘못 등록된 차단 단어 필터가 있을경우 홈페이지 관리자에게 문의 바랍니다.</li></p><p>        <li>총 등록된 금지단어 필터 <em>'<?php echo count($filter) ?>'</em>건</li></p><p>      </ul></p><p><?php</p><p>  break;</p><p>  }</p><p>}</p><p>?></p><p>

 

이렇게 소스를 짰으며.. 기본적인 그누보드5 단어 필터를 쓰고있는데 첫번째 단어필터 만작동 하고 나머진 작동 자체를 안하는데 도아주세요 ㅜ_ㅜ..

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
p
10년 전

break;

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

10년 전

$filter = '금지어1,금지어2,금지어3';

$filter = str_replace("," , "|" , $filter); // 정규식을 사용하기 위해 콤마를 | 로 바꿈

 

$search = '금지어1을 쓰고 금지어3도 써보자!';

if (preg_match_all('/('.$filter.')/', $search, $match) == true) {

?>

금지어에 걸렸습니다.

금지어에 걸린 단어들은 아래와 같습니다.

for ($i=0, $loop=count($match[0]); $i<$loop; $i++) {

echo $match[0][$i].' ';

}

}

?>

 

위와 같이 하면 아래와 같이 나옵니다.

 

 

금지어에 걸렸습니다.

금지어에 걸린 단어들은 아래와 같습니다. 

금지어1

금지어3

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

10년 전

필터단어가 금지어1, 금지어2, 금지어3 이렇게 콤마뒤에 스페이스 같은게 있지 않나요?

$str $filter[$i]; // 필터단어의 앞뒤 공백을 없앰

이렇게 주석을 하신것을 보아 왠지 그런것 같은데... 

$str = trim($filter[$i]); // 필터단어의 앞뒤 공백을 없앰

실제로 함수를 적어주셔야 하는것이 아닌지....

 

그리고 이런건 이왕이면 정규식으로 해주면 좋습니다.

$config['cf_filter'] = '안녕1,안녕2,안녕3';

if (preg_match('/('.str_replace(',','|',$config['cf_filter']​).'/',$search,$match) == true) {

echo "$search 문자열 중에 $match[1] 문자열은 금지어입니다.";

}​

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

익명닉네임
10년 전
하하.. 그런건 없구요.. port443 님 말대로 저거 break; 뺐더니 정상적으로 작동되네요.. ㅎㅎㅎ.ㅎ.ㅎ.ㅎ.ㅎ. 저 바보였나봐염~

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인